Base64 编码器不编码 UTF-8 [英] Base64 Encoder not encoding UTF-8

查看:30
本文介绍了Base64 编码器不编码 UTF-8的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个应该编码UTF-8 Base64的程序,但不是.我的编码器代码如下:

公共类编码器{public static void Encode() 抛出 IOException{byte[] bytes = Base64.encodeBase64(readFile("C:\\Users\\Dragon\\Desktop\\Binary\\Diamond.png", StandardCharsets.UTF_8).getBytes(StandardCharsets.UTF_8));String binary = new String(bytes);PrintWriter out = new PrintWriter("C:\\Users\\Dragon\\Desktop\\Binary\\Base64.txt");out.println(二进制);关闭();System.out.println("您的文件已保存在 C:\\Users\\Dragon\\Desktop\\Binary\\Base64.txt");}静态字符串读取文件(字符串路径,字符集编码)抛出 IOException{byte[] 编码 = Files.readAllBytes(Paths.get(path));返回新字符串(编码,编码);}}

当我用这个网站(具有 UTF-8 功能)解码时:http://www.base64decode.org/ 我得到:输入(我的代码做了这个):

<预> <代码> 77 + 9UE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/vv73vv71hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23vv71mJ0sAAADvv71JREFUOO +/vWPvv73vv73vv70/AyUY77 + 9QAM877 + 9Bu +/VE +/vTHvv708XgNAGu +/vQHvv70hOA3vv71pXu +/VE +/vTkcX ++/VE +/VE +/VE +/VE +/vSjvv71gNQDvv70Z77 + 9AE +/vRkE77 + 977 + 9XgRj77 + 9De +/vWkEGQTvv70gA ++/vV3vv71hAO +/VE +/VS/vv71Q77 + 977 + 977 + 9RhRX77 + 9NQBkIy4DYO +/VE +/vWkASO +/VE +/vdmNWA3vv73vv73vv70GY ++/vQbvv70CDO +/vQEZ77 + 9DAVhEBvvv70B77 + 9QARpBu +/vQLvv70A77 + 9MDHvv71hADMA77 + 9R1wG77 + 9bCfvv73vv73vv73vv73vv73vv71077 + 977 + 9Mjbvv703KVPvv70b77 + 977 + 9AB0QYe +/vV4VTO+/vQAAAABJRU5E77+9QmDvv70=

网站的预期输出:

‰PNG人类发展报告??óÿa 文本作者 minecraftinfo.comßf'K ²IDAT8Ëcøÿÿ?%Á@<æÿ'1º<^@к!8€i^ôí9_üõù¿Áí½(†`5 |¤|¼Þ^c¢€ià ]a ºæž/P°ÂÔFWà5 d#.`®Ài H³ÙX®Îc¼À ¤ƒ a?«°@iÙÓ Ã01œa 3 äG\Àl'˜Œît¢26Œ7)SœÉÅ ?aÍ^L‹ IEND®B`‚

来自网站的实际输出:

 PNGIHDR??  atEXtAuthorminecraftinfo.com f'K IDAT8 c   ?% @<   1 <^@  !8i^  9_     ( `5     ^ci   ] a/P   FW 5d#.`  iH  ٍXc     a?  @i   01 a3 G\ l'      t  26 7)S   ?a ^L IENDB`

但是,当我使用此站点而不是我的代码对完全相同的内容进行编码时,它确实具有 UTF-8 格式并可以正确解码.那么我做错了什么?

解决方案

Base64.encodeBase64byte[] 作为输入.您应该将 Files.readAllBytes(Paths.get(path)) 的结果直接传递给 Base64.encodeBase64.

So I have a program that is supposed to encode UTF-8 Base64, but is not. My Encoder code is as follows:

public class Encoder {
    public static void Encode() throws IOException{
          byte[] bytes = Base64.encodeBase64(readFile("C:\\Users\\Dragon\\Desktop\\Binary\\Diamond.png", StandardCharsets.UTF_8).getBytes(StandardCharsets.UTF_8));
          String binary = new String(bytes);
          PrintWriter out = new PrintWriter("C:\\Users\\Dragon\\Desktop\\Binary\\Base64.txt");
          out.println(binary);
          out.close();
          System.out.println("Your File has been saved at C:\\Users\\Dragon\\Desktop\\Binary\\Base64.txt");
    }
    static String readFile(String path, Charset encoding) 
              throws IOException 
            {
              byte[] encoded = Files.readAllBytes(Paths.get(path));
              return new String(encoded, encoding);
            }
}

And when I decode it with this website (That has UTF-8 Functionality): http://www.base64decode.org/ I get: Input (My code made this):

77+9UE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/vv73vv71hAAAAGHRFWHRBdXRob3IAbWluZWNyYWZ0aW5mby5jb23vv71mJ0sAAADvv71JREFUOO+/vWPvv73vv73vv70/AyUY77+9QAM877+9Bu+/ve+/vTHvv708XgNAGu+/vQHvv70hOA3vv71pXu+/ve+/vTkcX++/ve+/ve+/ve+/ve+/vSjvv71gNQDvv70Z77+9Ae+/vRkE77+977+9XgRj77+9De+/vWkEGQTvv70gA++/vV3vv71hAO+/ve+/vS/vv71Q77+977+977+9RhRX77+9NQBkIy4DYO+/ve+/vWkASO+/ve+/vdmNWA3vv73vv73vv70GY++/vQbvv70CDO+/vQEZ77+9DAVhEBvvv70B77+9QARpBu+/vQLvv70A77+9MDHvv71hADMA77+9R1wG77+9bCfvv73vv73vv73vv73vv73vv71077+977+9Mjbvv703KVPvv70b77+977+9AB0QYe+/vV4VTO+/vQAAAABJRU5E77+9QmDvv70=

Expected output from website:

‰PNG


IHDR         óÿa   tEXtAuthor minecraftinfo.comßf'K   ²IDAT8Ëcøÿÿ?%Á@<æÿ‘1º<^@к!8
€i^ôí9_üõù¿Áí½(†`5 ¦¤¦¼Þ^c¢
€ià ]a ºæž/P°ÂÔFWà5 d#.`®Ài H³ÎÙX
®Îc¼À¤ƒa«°@iÙÓ Ã01œa 3 äG\Àl'˜Œît¢"26Œ7)SœÉÅ aÍ^L‹    IEND®B`‚

Actual output From website:

�PNG


IHDR��atEXtAuthorminecraftinfo.com�f'K�IDAT8�c���?%�@<���1�<^@��!8
�i^��9_�����(�`5�����^c�
�i� �]�a��/�P���FW�5d#.`��iH��ٍX
���c����a��@i���01�a3�G\�l'������t��26�7)S���a�^L�IEND�B`�

However, when I encode the same exact thing using this site and not my code, It DOES have UTF-8 Formatting and decodes correctly. So what am I doing wrong?

解决方案

You Base64.encodeBase64 take byte[] as input. You should pass result of Files.readAllBytes(Paths.get(path)) to Base64.encodeBase64 directly.

这篇关于Base64 编码器不编码 UTF-8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆