首先看下这段代码,结果是输出“相等”,也就是“中”和“文”字在encoding.GetBytes后得到的字节数组居然是一样的,这样的话导致转换后的字节数组根本无法还原回原本的字符串,导致信息丢失。谁熟悉这方面的原理,有什么解决的方法?
PS:utf-8,gb2312编码都不会有这个问题
PS:utf-8,gb2312编码都不会有这个问题
static void Why2() { string str1 = "中"; string str2 = "文"; string encodingName = "latin1"; Encoding encoding = Encoding.GetEncoding(encodingName); byte[] data1 = encoding.GetBytes(str1); byte[] data2 = encoding.GetBytes(str2); if (data1.Length == data2.Length) { bool equal = true; for (int i = 0; i < data1.Length; i++) { if(data1[i]!=data2[i]) { equal = false; break; } } Console.WriteLine(equal?"相等":"不等"); } else { Console.WriteLine("不等"); } }
解决方案
20
你本人看看data1和data2都是啥,你的字符集里不包含这两个中文里,转码后只能对应固定的1,当然一样了。
20
latin1 欧洲通用字符集1,国际标准 ISO-8859-1
是单字节字符集,码值范围 0x00~0xff
gb2312 中国国家标准,国际兼容标准 ucs-2、utf-16,双字节字符集
utf-8 兼容亚洲字符集的过渡标准,其 3字节部分兼容亚洲字符集
是单字节字符集,码值范围 0x00~0xff
gb2312 中国国家标准,国际兼容标准 ucs-2、utf-16,双字节字符集
utf-8 兼容亚洲字符集的过渡标准,其 3字节部分兼容亚洲字符集
50
名字都叫“拉丁”了,你觉得会和中文沾边么?
5
然后?结论是明显的,你把双字节当作单字节解释,自然就要丢掉一半了
5
然后的事情,你需要先付费把latin1国际规则给买断了。