用UTF-8解析GBK的问题,

Haisen大王 2015-06-29 11:08:06
GBK编码文件下就一个中文字符“我”
现在字节流读取它的两个字节。
在平台UTF-8编码下显现的乱码字符getbytes后,得到6个字节。


就是这里不清楚,GBK的两个字节怎么就被UTF-8解析成字符了(尽管是乱码)

然后再生成UTF-8的字节,怎么就不一样了呢???
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haisen大王 2015-06-29
  • 打赏
  • 举报
回复
在UTF-8的这个乱码字符,怎么有两种字节表示??
Haisen大王 2015-06-29
  • 打赏
  • 举报
回复
引用 4 楼 nmyangym 的回复:

String s = new String(buf);
如果你的源文件是GBK编码的,上面这句应该写成:
String s = new String(buf, 0, c, "GBK");;
否则的话,程序是按utf-8的方式生成字符串。
这个我清楚,直接看源代码,得到两个字节,又生成字符串,又生成自己。。。。同样是这�� 两个乱码字符,怎么对应了前后两种字节表达, 明白我意思吗?
nmyangym 2015-06-29
  • 打赏
  • 举报
回复

String s = new String(buf);
如果你的源文件是GBK编码的,上面这句应该写成:
String s = new String(buf, 0, c, "GBK");;
否则的话,程序是按utf-8的方式生成字符串。
Haisen大王 2015-06-29
  • 打赏
  • 举报
回复
[quote=引用 2 楼 humanity 的回复: 有个只有 “我” 的GBK编码txt文件。我现在用字节流读取出2个字节。 通过UTF-8的编码格式new一个string,然后在string.getbytes()得到的是6个字节。
FileInputStream in=new FileInputStream(new File("GBK.txt"));
			byte[] buf=new byte[512];
			int c;
			while((c=in.read(buf, 0, 512))!=-1){
				for (byte b : buf) {
					if(b!=0){
						System.out.print( b );
					}
				}
				String s=new String(buf);
				System.out.println("          "+s);
				for (byte b : s.getBytes()) {
					if(b!=0){
						System.out.print( b );
					}
				}
				Writer out=new  OutputStreamWriter(new FileOutputStream(new File("utf-8.txt")));
				
				out.write(s.trim());
				out.close();
-50-46          ��
-17-65-67-17-65-67
也就是说在UTF-8下��这两个乱码怎么有2种字节(2位,6位)表达
humanity 2015-06-29
  • 打赏
  • 举报
回复
不清楚你说的 UTF-8 解析 GBK 是什么意思。 编码转换是先把数据读取成字符再编码成 byte. 比如:

// 别人发送给你时用 GBK 编码:
String data = "这是一句中文";
byte[] GBK = data.getBytes("GBK");

socketOutputStream.write(GBK);

// 你收到后:
byte[] received = socketInputStream....();

String decoded = new String(received, "GBK"); // 用对方的编码方式来解码

byte[] encoded = decoded.getBytes("UTF-8"); // 再编码成 UTF-8 转发给第3方。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧