试图检测俄语文本的编码 - 并读取为字符串

时间:2015-11-13 07:42:21

标签: c# .net

我通过网络收到一些俄文文本。这是转储那些字节:

当我试图将其解释为ASCII字符串时,它当然不起作用。这似乎都不是UTF8编码。有人可以帮助如何在 C#中读取这些字节作为字符串吗? (你可以看到调试器显示它们旁边的字母)

enter image description here

3 个答案:

答案 0 :(得分:1)

看起来像西里尔字母,代码页1251。

var bytes = new byte[]
{
    210, 240, 224, 237, 231, 224, 234, 246, 232, 255, 32, 237, 229, 32, 236, 238, 230, 229, 242, 32, 225, 251, 242
};
var text = System.Text.Encoding.GetEncoding(1251).GetString(bytes);
// text = "Транзакция не может быт"

不确定是否有更好的方法来解决问题,而不是循环使用可用的代码页并查看看起来正确的内容:

for (var i = 1; i < 100000; ++i)
{
    try
    {
        Console.WriteLine(System.Text.Encoding.GetEncoding(i).GetString(bytes));
        Console.WriteLine("Encoding: {0}", i);
        Console.WriteLine(System.Text.Encoding.GetEncoding(i).EncodingName);
        Console.WriteLine();
    }
    catch
    {
    }
}

答案 1 :(得分:1)

一般情况下,如果您知道在大多数情况下您获得文本的位置,您可以获得有关编码的一些信息,那么您只需使用“编码”类,选择适当的编码并调用GetString

例如Encoding.UTF8.GetString() 左右Encoding.GetEncoding(1251).GetString()

如果您没有关于编码的任何信息,那么这是一项不同的任务,您必须寻找一些编码检测算法

答案 2 :(得分:0)

var input = "Привет, люди!";
var utf8bytes = Encoding.UTF8.GetBytes(input);
var win1251Bytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1251"), utf8bytes);
File.WriteAllBytes(@"foo.txt", win1251Bytes);