richTextBox 的编码

Encoding for richTextBox

我有第 3 方库,returns 我有一些字符串 - "(c) Љ®аЇ®а жЁп Њ ©Єа®б®дв (Microsoft Corporation),2015 Ј. ‚бя Їа ў § Ёйял".我在 google 中搜索如何检测此文本的编码并得到它是 cp866 并显示为 KOI-7。

我尝试将其编码为 windows-1251 并在 richTextBox 中显示该字符串。但我收到了下一条文本 - “(c) ?R фR я¦рЇ ?яcт RЎR¤ў (Microsoft Corporation),2015 ?. 'Ў? ф ячя я©р©?-«."

输出文本应为 - (c) Корпорация Майкрософт (Microsoft Corporation),2015 年。 Все права защищены.

这是俄语(西里尔文)

        var fromEncodind = Encoding.GetEncoding(866);//from cp866
        var bytes = fromEncodind.GetBytes(output);
        var toEncoding = Encoding.GetEncoding(1251);//to windows-1251
        output = toEncoding.GetString(bytes);

基于This Answer你可以验证你需要的codepage然后测试字符串。

找到您需要的编码页面:

const string source = "(c) Љ®аЇ®а жЁп Њ ©Єа®б®дв (Microsoft Corporation), 2015 Ј. ‚ᥠЇа ў § йЁйҐ­л.";
const string destination = "(c) Корпор ция М йкрософт (Microsoft Corporation), 2015 г. Все пр в з щищены.";

foreach (var sourceEncoding in Encoding.GetEncodings())
{

    var bytes = sourceEncoding.GetEncoding().GetBytes(source);
    foreach (var targetEncoding in Encoding.GetEncodings())
    {
        if (targetEncoding.GetEncoding().GetString(bytes) == destination)
        {
            Console.WriteLine("Source Encoding: {0} TargetEncoding: {1}",sourceEncoding.CodePage,targetEncoding.CodePage);
        }
    }
}

// Result: Source Encoding: 1251 TargetEncoding: 866

这确认您使用了正确的代码页。

然后获取你需要的字符串:

var decodedCyrillic = Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1251).GetBytes(source));

你很接近,但你提供的源字符串中有一个额外的 space。这导致了编码问题。上面代码中的源字符串就是将要识别的字符串编码。