工作中发现从某公司的BI系统中导出的csv文件,其中所有的中文字符都不能正常显示,但是英文、数字、换行符、Tab均正常显示。
使用Word和Notepad++,试了所有的Encoding,都不能正常所显示。于是怀疑是数据遭到了不正确的二次转换所致。后经反复试验,发现果然如此。原始数据在数据库中应该是以GBK形式储存,在导出csv文件时,程序错误使用了不支持中文的Windows-1252 to UTF8函数,把所有用GBK表示的两个字节的汉字拆开,每个字节当成一个带音调符号的拉丁字母(十进制128-255范围内的字符,比如ÈÕÏú),然后把这些拉丁字母转换成了UTF-8,导致乱码。
在纯英文的Windows系统环境下 ,可以直接使用Notepad++对此类乱码进行转码处理。
具体方法为:
一、首先确保操作系统的System Locale也设为英语: Control Pannel -- Region -- Administrative -- Language for non-Unicode programs也需要设置为English。
二、使用Notepad++打开包含乱码的文件,点击菜单栏中的Encoding -- Convert to ANSI,将文件转换为系统默认的ANSI-US编码,即Windows-1252。如果是中文系统,这步操作会将就文件转换为GBK,导致转换失败。因为ANSI是一个广义的编码标准,根据不同的语言环境会变化,GBK也是一种ANSI编码标准。
三、再点击Encoding -- Character sets -- Chinese -- GB2312(Simplified Chin