C# 二进制阅读器/CSVReader,将特殊字符呈现为;
我从一个MVC应用程序开始,通过一个视图上传一个CSV文件。此CSV文件包含一个特殊字符。对于本例,我有一个CSV文件,其中只有一个字段。如您所见,它包含特殊字符(umlaut)并在CSV中保存fine 该文件通过MVC上传,并作为类型为C# 二进制阅读器/CSVReader,将特殊字符呈现为;,c#,asp.net-mvc,csv,encoding,C#,Asp.net Mvc,Csv,Encoding,我从一个MVC应用程序开始,通过一个视图上传一个CSV文件。此CSV文件包含一个特殊字符。对于本例,我有一个CSV文件,其中只有一个字段。如您所见,它包含特殊字符(umlaut)并在CSV中保存fine 该文件通过MVC上传,并作为类型为HttpPostedFileBase的参数(称为file 使用BinaryReader对其进行处理,并将其字节读取并保存到数据库中 byte[] fileData; using (var binaryReader = new BinaryReader(file.
HttpPostedFileBase
的参数(称为file
使用BinaryReader
对其进行处理,并将其字节读取并保存到数据库中
byte[] fileData;
using (var binaryReader = new BinaryReader(file.InputStream, Encoding.UTF8))
{
fileData = binaryReader.ReadBytes(file.ContentLength);
}
对于本例,其最终结果是以下字符串:
0x52FC676279
稍后,当我希望从CSV文件中重新创建原始字符串时,我会通过CsvReader
:
var configuration = new CsvConfiguration { Encoding = Encoding.UTF8 };
using (var stream = new StreamReader(new MemoryStream(fileBytes)))
{
using (var csvReader = new CsvReader(stream, configuration))
{
while (csvReader.Read())
{
// Do read stuff
}
}
}
此时,我可以检查csvReader>CurrentRecord
以查看解码的字符串。我的问题是特殊字符被解码为� 而不是它们的实际价值。因此,原始CSV文件中的Rügby
值作为R�gby
我假设这是一个使用哪种编码的问题。我已将上述代码中的两个
UTF-8
设置更改为各种编码,但均无效。您更改它们是什么意思您已将它们更改为使用UTF-8您可能需要使用UTF-16来支持宽字符强字符编码?您需要验证/了解csv文件的编码。它似乎不是UTF-8。您没有为StreamReader
指定编码。这不是您应该如何使用binarydreader
——如果您坚持以字节数组的形式读取整个文件,只需执行一个简单的Read
BinaryReader
用于结构化二进制格式,而不是将文本文件作为字节加载:)在StreamReader上指定编码会导致CSVReader给出一个长度为1的字符串数组,并且该单个字符串是一个大的汉字字符串。