Java 字符编码问题

2018-03-31 14:44:48 +08:00
 muzzy

String name="思"; String sendName = new String(name.getBytes("UTF-8"),"GBK"); System.out.println(sendName); String recvName = new String(sendName.getBytes("GBK"),"UTF-8"); System.out.println(recvName); 各位 java 程序员,上段代码中的编码转换有什么问题吗?大部分 recvName 中大部分汉子都可以正常显示,但‘思’和‘怡’两个字乱码。

1608 次点击
所在节点    Java
2 条回复
Fri
2018-04-05 21:04:25 +08:00
问题出在 UTF-8 编码后的“思{-26, -128, -99 }”字占用三个字节,而 GBK 编码是每两个字节转为一个字符,所以在用 GBK 编码{-26, -128, -99 }的时候,系统会用“ 0 ”补全缺少的第四个字节变为{-26, -128, -99, 0}以进行编码。

之后将{-26, -128, -99, 0}按 UTF-8 编码为字符串时,因为多了一个字节“ 0 ”,所以就无法映射到“思{-26, -128, -99 }’字了。
Fri
2018-04-05 21:44:42 +08:00
1# 抱歉.....重新思考了下发现上面的回复是❌的。

可以确认的是 UTF-8 是长度可变的一种编码方式,编码后会占用 1~4 个字节不等,GBK 编码后占用 2 个字节。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443130

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX