我们现在的项目,读入每行数据,每隔一个","取一个字符串,与指定的字符串比较.
但现在将CSV文件用文本打开后,另存为UNICODE格式,再导入这个CSV文件,就不能正确读入字符了.
同样的字符串总是无法比较. 
跟踪调试时,发现取得的字符串中被插入了很多"."一样的字符,并且无法复制.不是空格,不知道是什么字符.谁能告诉我,且不管导入的是何格式的,就是在不同的编码的文本中正确取得想要的字符串?
或是的CSV中的每个CELL的值.

解决方案 »

  1.   

    答:由于你是另存为UNICODE格式,所以每一个字符都是两个字节。你所说的 插入了很多"."一样的字符,并且无法复制.不是空格,不知道是什么字符.  其实就是字节0而已。如:'c' 按你的UNICODE保存后,实际是两个字节(十六进制):00 63,这个00就是你所看到的那些“所谓的.一样的字符”。
    怎么办?
    一种方法:规定所有的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等等的处理了。
    以上仅供你参考
      

  2.   

    答:对不起,表格排错位了。改正:
    常见的判别有: 
      字节       类型 
    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默认处理吧。 
      

  3.   

    跟上发问,没分了,CVS密钥文件是用CVS客户端打开的?然后获取账号密码登陆?还是导入密钥?