通过C#读取txt文件(在unicode和utf8中)

时间:2013-09-18 11:55:53

标签: c# unicode encoding utf-8

我创建了两个具有相同内容的“txt文件”(Windows记事本)“谢谢 - спасибо”并将它们保存在utf8和unicode中。在记事本中他们看起来很好。然后我尝试使用.Net阅读它们:

...File.ReadAllText(utf8FileFullName, Encoding.UTF8);

...File.ReadAllText(unicodeFileFullName, Encoding.Unicode);

但在这两种情况下我都得到了这个“谢谢 - ???????”。怎么了?

UPD: 代码为utf8

static void Main(string[] args)
        {
            var encoding = Encoding.UTF8;
            var file = new FileInfo(@"D:\encodes\enc.txt");
            Console.OutputEncoding = encoding;
            var content = File.ReadAllText(file.FullName, encoding);
            Console.WriteLine("encoding: " + encoding);
            Console.WriteLine("content: " + content);
            Console.ReadLine();
        }

结果: 谢谢ÑпаÑибо

3 个答案:

答案 0 :(得分:13)

编辑为UTF8应该支持这些角色。您似乎正在输出到控制台或没有编码设置的位置。如果是这样,您需要设置编码。对于控制台,您可以执行此操作

string allText = File.ReadAllText(unicodeFileFullName, Encoding.UTF8);
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(allText);

答案 1 :(得分:4)

使用编码类型默认

dat %>% mutate_at(vars(matches("fac|fctr|fckr")),funs(factor)) %>%
  mutate_at(vars(matches("dbl|num|qty")),funs(as.numeric))

它将修复 mutate_at(vars(matches("_DT$")),funs(as.Date(as.character(.),format="%Y%m%d"))) Chracters。

答案 2 :(得分:3)

当输出Unicode或UTF-8编码的多字节字符到控制台时,您需要设置编码以及确保控制台具有支持多字节字符的字体集以显示相应的字形。使用现有代码,Windows或Web窗体上的MessageBox.Show(内容)或显示将正确显示。

有关在控制台窗口中设置字体的说明,请查看http://msdn.microsoft.com/en-us/library/system.console.aspx

支持Unicode字符要求编码器识别特定的Unicode字符,并且还需要具有呈现该字符所需的字形的字体。要成功地向控制台显示Unicode字符,控制台字体必须是设置为非栅格或TrueType字体,如Consolas或Lucida控制台。“

作为旁注,您可以使用FileStream类读取文件的前三个字节,并查找字节顺序标记指示器以在读取文件时自动设置编码。例如,如果byte [0] == 0xEF&& byte [1] == 0xBB&& byte [2] == 0xBF然后你有一个UTF-8编码的文件。有关详细信息,请参阅http://en.wikipedia.org/wiki/Byte_order_mark