我正在读取包含特殊字符的csv文件,例如long en dash -、左双引号“和右双引号”,而且我无法找到正确读取和写入这些字符的正确方法。我以为它是UTF8或Unicode,但它将它们读写为正方形或?带着钻石。打开notepad++中的文件以确认。也许还需要另一种特定的编码?下面是我到目前为止使用的代码,用不同的编码尝试了几种不同的代码。
string[] lines = File.ReadAllLines(filePathTxt.Text, Encoding.UTF8);
...
Stream s = new FileStream(filePath, FileMode.Append);
StreamWriter sw = new StreamWriter(s, Encoding.UTF8, 1000, true);投入:
调查-公众
文件:,“A”
出柜
调查�公众
文档:,�A�
当调试器读入字符串数组时,还会显示调试器的问题。
编辑:我也尝试过Unicode。我使用的是NotePad++,Win 10。问题肯定在读取步骤中,因为如果我添加以下行来手动写入一行数据,如下所示:
sw.WriteLine("Surveys – Public");这一行很好地写了破折号,所以它是在从源csv开始读取文件时,在那里字符会被弄乱。我试着用几个不同的编码来阅读,而NotePad++只是将csv显示为ANSI。
发布于 2018-05-25 20:16:27
哦,天哪,我现在想出来了,这看起来很傻,但事情就是这样的。
NotePad++状态栏显示为ANSI。一开始,我没有提供读或写的编码。
在查看要使用的编码选项时,我发现在默认编码中有一个选项:
string[] lines = File.ReadAllLines(filePathTxt.Text, Encoding.Default);但是我从来没有尝试过这种方法,因为没有指定使用哪种编码必须是默认的,对吧?嗯,我想不是因为实际上在读和写的时候给了它这个,使它现在正常工作了。
https://stackoverflow.com/questions/50535715
复制相似问题