C/C#下编码、转码问题

file.me 发布于 2012/03/10 21:53
阅读 1K+
收藏 0
我用C语言写了一个接口,实现从编码为utf8的文件中读取数据,并在这个接口中实现了从utf8到gbk的转换,所读取到的数据在windows dos下面试正确,中文也没有乱码,就是测试出了这个API正常的。现在我在C#中调用这个API,再用C#显示,却是一个个的数字,求解....望高手指点。
加载中
0
乌龟壳
乌龟壳
可能C#要把通过这个接口得到的东西 按照编码转成字符串再显示才可以吧。
0
中山野鬼
中山野鬼

我望了utf8是多少位的了,貌似是24位一个汉字。gbk影响深点,是16位。一般出这个问题,有两种,

1、源码,文本文件中,有常量,在不同编译器环境下,对常量的在编译器预编译的字符识别方法不一样,导致最终显示是乱码。前面我手下的一个小伙子才出了这个问题。

2、代码问题,你对每个中文字的位宽,在不同环境或编译器的识别不一样,导致内存数据出错。例如,假设一个是32位存放一个中文汉字(只是假设),一个是16位存放一个中文汉字。你一头传进来的数组,是16个空间(不考虑\0),则你认为是8个汉字。而另一头是32位存放一个中文,则只认为是4个中文汉字,不同的码表由导致实际映射到字库的字由完全不一样。

建议,首先,尽量不要在代码源码里放中文常量。如果你非要有初始化的中文,可以在代码执行时,预读上来。

其次,你需要用C专门做一个针对不同码表的转换模块,至少要达到转换后,在DOS下实现是乱码吧。好象外面有这个功能的源码,你可以找一下。转换后,再给其他的模块。不要让你的C#模块去处理(建议)

0
李元霸
李元霸
你的字符串是通过 api 返回的吗,如果是这样,封送会有问题
0
sToa
sToa
调试,看C#和C调用这函数返回的结果是否一样,是一样则是C#显示部分要调整,可能需要转换成unicode再输出吧
返回顶部
顶部