我已阅读某个纯文本文件(csv),我遇到xA0
Visual Studio 2015:
Notepad ++ :(将char编码设置为utf-8时)
因此似乎是non-breaking space 所以我尝试了this:
temp = temp.Replace("\xA0", string.Empty);
但它不起作用并给了我类似于第一个截图的黑色方块。 我也改变了
System.IO.StreamReader sr = new System.IO.StreamReader(csvFile.FileContent);
使用特定的utf-8编码:
System.IO.StreamReader sr = new System.IO.StreamReader(csvFile.FileContent, System.Text.Encoding.UTF8);
两者给出了相同的结果。我真的不喜欢字符编码,可以使用一些关于我的错误的帮助和解释。
edit2 将streamreader构造函数值更改为:
System.IO.StreamReader sr = new System.IO.StreamReader(csvFile.FileContent, true);
导致读取文件的utf-8编码。我尝试将latin1转换为utf-8,但这给了我???
https://stackoverflow.com/a/13999801/169714
Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(temp))
答案 0 :(得分:0)
尝试将结果放入字符串中,读取数据并打印出结果
类似的东西:
string[] data = File.ReadAllLines(yourSavePath);
File.WriteAllLines(yourSavePath, data);
如果我是对的,它应该修复它,这是一个缺少字符的问题
答案 1 :(得分:0)
0xA0
是Latin1,iso-8859-1中的不间断空格。您可以通过传递Encoding.GetEncoding("iso-8859-1")
作为编码来阅读它:
var latin1= Encoding.GetEncoding("iso-8859-1");
var sr = new System.IO.StreamReader(csvFile.FileContent, latin1);
例如,对于输入数组:
byte[] values={0x53,0x34,0x35,0x3b,0x35,0x31,0xa0,0xa0,0xa0,0xa0,0xa0};
UTF8返回
var s1=Encoding.UTF8.GetString(values);
Console.WriteLine(s1);
S45; 51
Latin1返回有效字符串
var s2=latin1.GetString(values);
Console.WriteLine(s2);
S45; 51
.NET使用Unicode表示字符串,默认情况下使用UTF8读取文本文件。例如,StreamReader's构造函数默认为UTF8:
public StreamReader(Stream stream)
: this(stream, true) {
}
public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks)
: this(stream, Encoding.UTF8, detectEncodingFromByteOrderMarks, DefaultBufferSize, false) {
}
要使用系统区域设置,必须明确传递Encoding.Default编码。
var sr = new System.IO.StreamReader(csvFile.FileContent, Encoding.Default);
许多西欧和英语国家都使用此编码,因此系统区域设置可能应该是Latin1。这是在进口工作中做出的冒险假设