商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > UTF8转成GB2312乱码问题解决方案

UTF8转成GB2312乱码问题解决方案

  发布于2026-07-22 阅读(0)

扫一扫,手机访问

最近在做一个项目时,遇到了一个挺典型的问题,这里记录一下,也算是一次经验总结。 项目本身分为两大块:一是新闻数据采集,二是采集信息的审核,最后还要生成XML文件。数据采集完成后,经过人工编辑,需要导出一个ACCESS文件,再把这个文件导入到信息审核系统。在ACCESS库里,存储新闻信息的字段类型是`ntext`,而审核系统对应的字段是`varchar(max)`。导入之后,发现有些“空白字符”变成了乱码——具体表现就是问号(?)。后来经过反复测试,发现这些根本不是普通的空格,而是一种特殊字符。 那怎么办?几番折腾后找到的第一个方案是:把`varchar(max)`类型改成`nvarchar(max)`,这样导入的数据就不会再出现这类问题了。但问题并没有彻底解决——后续测试中,对导入后的信息进行修改(通过.NET程序编辑功能)后,数据库中这条记录又出现了乱码。进一步研究发现,只要在插入语句里这样写就没问题了: ```sql insert into 表名 (news) values(N'更新后的值') ``` 为什么加个`N`?去百度一下就能明白,这里不展开说。 到这一步,总算松了口气。但后面的问题又让人陷入郁闷…… 审核完成的信息需要生成XML文件,而且要求XML使用GB2312编码。因为采集的新闻网站很多采用UTF-8编码,在转换过程中又出现了乱码——还是那个“空白”特殊字符搞的鬼。网上查到的方案是把UTF-8转成GB2312,但实际一试,根本解决不了。折腾了一上午,还是没辙。 正郁闷的时候,突然想到,不如用Visual Studio的调试功能,看看这个特殊字符到底是什么玩意儿。把数据库里的字段值读出来,然后转成字符数组:`content.ToCharArray();`,一个一个地看,终于发现那个导致乱码的字符是 `' '`(注意引号中的空白,这不是一个空格,而是一个在GB2312中无法识别的特殊字符)。这时候灵机一动:能不能直接用空格替换掉这个字符?马上行动,果然,乱码问题解决了。 真是让人郁闷,这么一个不起眼的字符,竟然浪费了大半天时间。 注意:替换时一定要用调试出来的那个真正的值(这才是导致乱码的特殊字符),调试时在即时窗口中粘贴即可。 ```csharp content = content.Replace(" ", " ");
本文转载于:https://www.jb51.net/article/35285.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注