首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java中的解码和编码字符串并不总是一致的?

为什么java中的解码和编码字符串并不总是一致的?
EN

Stack Overflow用户
提问于 2018-04-24 10:19:49
回答 2查看 183关注 0票数 2

我对Java字符串的解码和编码感到困惑。

现在我有一个字符串变量"中国",意思是中国,它包含在中文本地字符集GB2312中,也包含在Unicode中。

那么,以下内容有什么区别呢?

代码语言:javascript
复制
val f = "中国"

println(new String(f.getBytes("GB2312"),"GB2312"))

println(new String((new  String(f.getBytes("GB2312"),"UTF8")).getBytes("UTF8"),"GB2312") ) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-24 12:10:09

它的行为是这样的,因为只有当new String(x, "UTF8").getBytes("UTF8")实际上是UTF-8字符串的有效字节表示时,x的输出才会是x。否则,根据String

此方法总是用此字符集的默认替换字符串替换格式错误的输入和不可映射的字符序列。

UTF-8的默认字符是�(位表示�).f.getBytes("GB2312")返回以下位序列:11010110 11010000 10111001 11111010。与一个无效字符一样,后面跟着11010000 10111001或й,然后是另一个无效字符。new String(f.getBytes("GB2312"),"UTF8")的输出用于�й�,或转换为二进制形式的11101111 10111111 10111101 11010000 10111001 11101111 10111111 10111101

1101011011111010是无效的,因为任何以表单11xxxxxx的字节开头的字节序列都必须后面跟着表单10xxxxxx中的一个或多个字节(确切的数字取决于第一个数字开头的1数)。有关UTF-8格式的更多细节,请参见维基百科

票数 1
EN

Stack Overflow用户

发布于 2018-04-29 14:35:35

简单地说,new String(s.getBytes("UTF8"),"GB2312") )没有做你认为它做的事情。(我不知道你认为它会起什么作用,但它不能带来什么好处,所以我猜想。)

它的意思是:使用UTF-8从字符串中编码文本,然后获取这些字节并对它们进行解码,就好像它们是使用GB2313编码的文本一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49999192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档