如何从 c# 中的 UTF-8 编码文本文件中读取 unicode 字符 "degree sign"?
How to read unicode character "degree sign" from a UTF-8 encoded text file in c#?
我录制了一个包含一些 unicode 字符的文本文件:例如"degree sign" \u00b0 和 "SUPERSCRIPT TWO" \u00b2.
然后我想用c# StreamReader 读取这个文本文件。无法正确读取那些 unicode 字符。
文本文件包括如下行:
26,车辆数据加速度 Z,m/s²,System.Single
27,VehicleData Angular 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。
我想好好读一下
这里的关键是将正确的Encoding
传递给reader;因为你说它是 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);
}
}
但是请注意,foreach
与 File.ReadLines("test.txt", Encoding.UTF8)
一起使用更容易:
foreach(var line in File.ReadLines("test.txt", Encoding.UTF8))
{
Console.WriteLine(line);
}
我录制了一个包含一些 unicode 字符的文本文件:例如"degree sign" \u00b0 和 "SUPERSCRIPT TWO" \u00b2.
然后我想用c# StreamReader 读取这个文本文件。无法正确读取那些 unicode 字符。
文本文件包括如下行:
26,车辆数据加速度 Z,m/s²,System.Single 27,VehicleData Angular 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。
我想好好读一下
这里的关键是将正确的Encoding
传递给reader;因为你说它是 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);
}
}
但是请注意,foreach
与 File.ReadLines("test.txt", Encoding.UTF8)
一起使用更容易:
foreach(var line in File.ReadLines("test.txt", Encoding.UTF8))
{
Console.WriteLine(line);
}