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。这导致了编码问题。上面代码中的源字符串就是将要识别的字符串编码。
我有第 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。这导致了编码问题。上面代码中的源字符串就是将要识别的字符串编码。