如何正确从txt文件中读取瑞典字符

11

我正在逐行阅读一个文件,其中包含像äåö这样的瑞典字符,但我该如何读取和保存具有瑞典字符的字符串。这是我的代码,我正在使用UTF8编码:

TextReader tr = new StreamReader(@"c:\testfile.txt", System.Text.Encoding.UTF8, true);
tr.ReadLine() //returns a string but Swedish characters are not appearing correctly...

tr.ReadLine() 返回的字符串无法显示瑞典字符。 - Geek
C# 字符串始终采用 UTF-16 编码。通过将 UTF-8 编码传递给 StreamReader,读取一行将返回一个正确编码的 UTF-16 字符串对象。现在只取决于您如何输出字符串... - CodeZombie
不,我并不是在写入命令行。我是将输入保存到另一个网络应用程序中。 - Geek
这是关联的代码页。在MS网站上查看正确的代码页并设置它。http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx - Sorceri
你能帮我找出适用于瑞典语的正确代码吗? - Geek
显示剩余6条评论
3个回答

18

您需要将System.Text.Encoding.UTF8更改为System.Text.Encoding.GetEncoding(1252)。请参见下面。

        System.IO.TextReader tr = new System.IO.StreamReader(@"c:\testfile.txt", System.Text.Encoding.GetEncoding(1252), true);
        tr.ReadLine(); //returns a string but Swedish characters are not appearing correctly

1

我自己解决了,即System.Text.Encoding.Default将支持瑞典字符。

TextReader tr = new StreamReader(@"c:\testfile.txt", System.Text.Encoding.Default, true);

你为什么将输入编码设置为UTF-8呢? - CodeZombie
1
@Geek 如果你的默认语言是瑞典语,那么它将起作用。如果不是,请查看我的帖子,其中提供了相应的代码页。 - Sorceri
1
这与语言或字符支持无关,UTF-8和CP1252都支持瑞典语。这与文件编码有关,即CP1252。您始终需要知道文件的编码(而不是语言)才能正确读取它。 - Esailija

0

System.Text.Encoding.UTF8 应该足够了,并且它受到 .NET Framework 和 .NET Core 的支持https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding?redirectedfrom=MSDN&view=netframework-4.8

如果你仍然遇到 ��� 字符(而不是 ÅÖÄ),那么检查源文件 - 它是什么编码格式?也许是 ANSI,那么你需要转换为 UTF8

你可以在 Notepad++ 中完成。你可以打开文本文件并转到 编码 - 转换为 UTF-8

或者在源代码(C#)中:

var myString = Encoding.UTF8.GetString(File.ReadAllBytes(pathToTheTextFile));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接