尝试检测俄语文本的编码并读取为字符串
Trying to detect encoding of Russian text-and read as string
我通过网络收到了一些俄语短信。这是这些字节的转储:
当我试图将其解释为 ASCII 字符串时,它当然不起作用。这似乎都不是 UTF8 编码。有人可以帮助如何将 C# 中的这些字节读取为字符串 吗? (你可以看到调试器显示了它们旁边的字母)
看起来像西里尔字母,代码页 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
{
}
}
var input = "Привет, люди!";
var utf8bytes = Encoding.UTF8.GetBytes(input);
var win1251Bytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1251"), utf8bytes);
File.WriteAllBytes(@"foo.txt", win1251Bytes);
一般来说,如果您知道在大多数情况下从何处获取文本,您就会了解一些有关编码的信息,因此您可以简单地使用 class "Encoding"、select适当的编码并调用 GetString
例如Encoding.UTF8.GetString()
左右 Encoding.GetEncoding(1251).GetString()
如果你没有任何关于编码的信息,那么这是一个不同的任务,你必须寻找一些编码检测算法
我通过网络收到了一些俄语短信。这是这些字节的转储:
当我试图将其解释为 ASCII 字符串时,它当然不起作用。这似乎都不是 UTF8 编码。有人可以帮助如何将 C# 中的这些字节读取为字符串 吗? (你可以看到调试器显示了它们旁边的字母)
看起来像西里尔字母,代码页 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
{
}
}
var input = "Привет, люди!";
var utf8bytes = Encoding.UTF8.GetBytes(input);
var win1251Bytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("windows-1251"), utf8bytes);
File.WriteAllBytes(@"foo.txt", win1251Bytes);
一般来说,如果您知道在大多数情况下从何处获取文本,您就会了解一些有关编码的信息,因此您可以简单地使用 class "Encoding"、select适当的编码并调用 GetString
例如Encoding.UTF8.GetString()
左右 Encoding.GetEncoding(1251).GetString()
如果你没有任何关于编码的信息,那么这是一个不同的任务,你必须寻找一些编码检测算法