我们现在的项目,读入每行数据,每隔一个","取一个字符串,与指定的字符串比较.
但现在将CSV文件用文本打开后,另存为UNICODE格式,再导入这个CSV文件,就不能正确读入字符了.
同样的字符串总是无法比较.
跟踪调试时,发现取得的字符串中被插入了很多"."一样的字符,并且无法复制.不是空格,不知道是什么字符.谁能告诉我,且不管导入的是何格式的,就是在不同的编码的文本中正确取得想要的字符串?
或是的CSV中的每个CELL的值.
但现在将CSV文件用文本打开后,另存为UNICODE格式,再导入这个CSV文件,就不能正确读入字符了.
同样的字符串总是无法比较.
跟踪调试时,发现取得的字符串中被插入了很多"."一样的字符,并且无法复制.不是空格,不知道是什么字符.谁能告诉我,且不管导入的是何格式的,就是在不同的编码的文本中正确取得想要的字符串?
或是的CSV中的每个CELL的值.
怎么办?
一种方法:规定所有的csv文件,统一采用GBK编码。这是最省事的办法。
另一种:若不能强制规定cvs文件的编码,则你在你的程序需要判别csv文件的编码类型了(方法:按字节流读取文件前几个字节进行类型判别)。常见的判别有:
字节 类型
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8
其它情况,你就按GBK默认处理吧。
判好类型后,你就按指定的类型编码进行文件的读取,就可按","进行split(...),然后转成CELL等等的处理了。
以上仅供你参考
常见的判别有:
字节 类型
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8
其它情况,你就按GBK默认处理吧。