我通过网络收到一些俄文文本。这是转储那些字节:
当我试图将其解释为ASCII字符串时,它当然不起作用。这似乎都不是UTF8编码。有人可以帮助如何在 C#中读取这些字节作为字符串吗? (你可以看到调试器显示它们旁边的字母)
答案 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);