首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# utf8转码最后一位乱码有关问题

2014-01-22 
C# utf8转码最后一位乱码问题byte[] utf8s1 Encoding.UTF8.GetBytes(英格丽·褒啊)string aaa Encod

C# utf8转码最后一位乱码问题
            byte[] utf8s1 = Encoding.UTF8.GetBytes("英格丽·褒啊");
            string aaa = Encoding.Default.GetString(utf8s1);
            byte[] utf8s2 = Encoding.Default.GetBytes(aaa);
            string s2 = Encoding.UTF8.GetString(utf8s2);
将上面一段字符串转成byte[]没有问题,然后再转成默认编码的字符串aaa="鑻辨牸涓铰疯鍟?",后面utf8s2理论上应该是与utf8s1一致的,但现在是最后一位由0x8a变成了0x3f,也就是?,所以导致最后的s2末位变成了乱码。
测试了很多,有些末位没问题,有些就被?代替,这是为什么,有没有什么办法解决?
因为我读Firebird数据库就是utf8的,varchar类型的函数貌似只有getstring,读进来就是乱码,而转换后就存在了上面的问题,时常末位成了乱码,其实是byte最后一个字节被自动替换成了0x3f也就是?号
[解决办法]
编码与解码要对应,这样才对:
            byte[] utf8s1 = Encoding.UTF8.GetBytes("英格丽·褒啊");
             string aaa = Encoding.UTF8.GetString(utf8s1);
             byte[] utf8s2 = Encoding.Default.GetBytes(aaa);
             string s2 = Encoding.Default.GetString(utf8s2);
[解决办法]
至于你说的“varchar类型的函数貌似只有getstring”,我猜它根本没有支持中文(或者其它几十种文字)的标准函数。如果你还是坚持使用这种数据库,还是好自为之吧。

热点排行