我从MVC应用程序开始,在那里我通过视图上传CSV文件。此CSV文件包含特殊字符。对于此示例,我有一个只有一个字段的CSV文件。 Image。如您所见,它包含特殊字符(变音符号)并在CSV中保存正常。
此文件通过MVC上传,并作为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
设置更改为各种编码无效。