Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二进制阅读器/CSVReader,将特殊字符呈现为࿽;_C#_Asp.net Mvc_Csv_Encoding - Fatal编程技术网

C# 二进制阅读器/CSVReader,将特殊字符呈现为࿽;

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.

我从一个MVC应用程序开始,通过一个视图上传一个CSV文件。此CSV文件包含一个特殊字符。对于本例,我有一个CSV文件,其中只有一个字段。如您所见,它包含特殊字符(umlaut)并在CSV中保存fine

该文件通过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
设置更改为各种编码,但均无效。

您更改它们是什么意思您已将它们更改为使用UTF-8您可能需要使用UTF-16来支持宽字符强字符编码?您需要验证/了解csv文件的编码。它似乎不是UTF-8。您没有为
StreamReader
指定编码。这不是您应该如何使用
binarydreader
——如果您坚持以字节数组的形式读取整个文件,只需执行一个简单的
Read
BinaryReader
用于结构化二进制格式,而不是将文本文件作为字节加载:)在StreamReader上指定编码会导致CSVReader给出一个长度为1的字符串数组,并且该单个字符串是一个大的汉字字符串。