latin1编码,信息丢失问题

.Net技术 码拜 9年前 (2016-02-25) 975次浏览
首先看下这段代码,结果是输出“相等”,也就是“中”和“文”字在encoding.GetBytes后得到的字节数组居然是一样的,这样的话导致转换后的字节数组根本无法还原回原本的字符串,导致信息丢失。谁熟悉这方面的原理,有什么解决的方法?
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字节部分兼容亚洲字符集

50

名字都叫“拉丁”了,你觉得会和中文沾边么?

5

然后?结论是明显的,你把双字节当作单字节解释,自然就要丢掉一半了

5

引用 4 楼 moondreamyou 的回复:
Quote: 引用 2 楼 xuzuning 的回复:

latin1 欧洲通用字符集1,国际标准 ISO-8859-1
是单字节字符集,码值范围 0x00~0xff
gb2312 中国国家标准,国际兼容标准 ucs-2、utf-16,双字节字符集
utf-8 兼容亚洲字符集的过渡标准,其 3字节部分兼容亚洲字符集

然后呢?

然后的事情,你需要先付费把latin1国际规则给买断了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明latin1编码,信息丢失问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)