如何在C#中从UTF-8编码的文本文件中读取Unicode字符“度数符号”?

时间:2019-07-03 13:14:22

标签: c# file-read

我录制了一个文本文件,其中包含一些Unicode字符:例如“度数符号” \ u00b0和“ SUPERSCRIPT TWO” \ u00b2。

然后,我想使用c#StreamReader读取此文本文件。这些unicode字符无法正确读取。

文本文件包含以下几行:

26,车辆数据加速度Z,m /s²,System.Single 27,VehicleData角速度约X,°/ s,System.Single

数据读取部分:

1. StreamReader indexReader = File.OpenText( filename + ".txt");
2. StreamReader indexReader = new StreamReader(filename + ".txt", System.Text.Encoding.Unicode);

...

数据分配部分:

for ( int i = 0; i < headerCount; i++ )
{
  string line = indexReader.ReadLine();
  string[] parameterHeader = line.Split( ',' );
  var next = new ReportParameters.ParameterInfoElement();
  next.parameterID = Int32.Parse( parameterHeader[ 0 ] );
  next.name = parameterHeader[ 1 ];
  next.units = parameterHeader[ 2 ];
  next.type = Type.GetType( parameterHeader[ 3 ] );

  _header.Add( next );
}

m /s²和°/ s将读为m /s�和�/ s。

我想正确阅读。

1 个答案:

答案 0 :(得分:1)

这里的关键是将正确的Encoding传递给读者;因为您说的是UTF-8:

/* write a dummy file as raw UTF-8; this is just test data that looks like:
1°
2²
3
*/
File.WriteAllBytes("test.txt", new byte[] {
         0x31, 0xC2, 0xB0, 0x0D, 0x0A,
         0x32, 0xC2, 0xB2, 0x0D, 0x0A, 0x33 });

// use the TextReader API to consume the file
using (var reader = new StreamReader("test.txt", Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

但是请注意,将foreachFile.ReadLines("test.txt", Encoding.UTF8)一起使用更容易:

foreach(var line in File.ReadLines("test.txt", Encoding.UTF8))
{
    Console.WriteLine(line);
}