簡體   English   中英

編碼richTextBox

[英]Encoding for richTextBox

我有第3方庫,該庫返回了一些字符串-“(c)©Microsoft(Microsoft Corporation),2015年。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 我在谷歌搜索如何檢測此文本的編碼,並得到它的cp866並顯示為KOI-7。

我嘗試將其編碼為Windows-1251,並在richTextBox中顯示字符串。 但是我得到了下一個文本-“(c)?RфRя¦рЇ?яcтRЎR¤ў(微軟公司),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);

根據此答案,您可以驗證所需的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));

您已經很接近了,但是您提供的源字符串中有多余的空間。 這導致了編碼問題。 上面代碼中的源字符串是字符串編碼將識別的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM