开发者社区> 问答> 正文

C/C#下编码、转码问题:报错

我用C语言写了一个接口,实现从编码为utf8的文件中读取数据,并在这个接口中实现了从utf8到gbk的转换,所读取到的数据在windows dos下面试正确,中文也没有乱码,就是测试出了这个API正常的。现在我在C#中调用这个API,再用C#显示,却是一个个的数字,求解....望高手指点。

展开
收起
kun坤 2020-06-07 20:13:44 489 0
1 条回答
写回答
取消 提交回答
  • 可能C#要把通过这个接口得到的东西 按照编码转成字符串再显示才可以吧。
    ######

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

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

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

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

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

    ######你的字符串是通过 api 返回的吗,如果是这样,封送会有问题######调试,看C#和C调用这函数返回的结果是否一样,是一样则是C#显示部分要调整,可能需要转换成unicode再输出吧
    2020-06-07 20:13:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载