修复字符串编码问题

时间:2015-02-13 11:04:10

标签: c# string encoding

有没有人知道我可以用来修复因编码问题而“混乱”的字符串的.Net库(优选NuGet包)?

我有第三方提供的Excel *文件,其中包含以下字符串:

Telefónica UK Limited

Serviços de Comunicações e Multimédia

这些条目只是用户错误(例如某人复制/粘贴错误或其他内容),因为同一文件中的其他地方相同的条目是正确的:

Telefónica UK Limited

Serviços de Comunicações e Multimédia

所以我想知道是否有一个库/包/东西需要一个字符串并修复“常见错误”,如çõçõóó 。我知道这不是100%万无一失,可能会导致一些假阴性,但是有一些经过现场测试的库可以帮助我清理一下我的数据。理想情况下,它会“自动检测”问题并“自动修复”它们,因为我无法总是在错误发生时告诉源编码(和目标编码)是什么。

*文件类型不是很相关,我可能有其他方的文本在其他文件格式中有相同的问题......

1 个答案:

答案 0 :(得分:1)

我最好的建议是从相关语言中使用的特殊字符列表开始。

我认为您只使用少数非US-ASCII字符处理葡萄牙语或其他欧洲语言。

我还假设您首先知道错误编码是什么(即代码页),它始终是相同的。

(如果你不能承担这些事情,那么它就是一个更大的问题。)

然后严重编码每个字符,并在源文本中查找结果。如果找到任何内容,您可以将其视为编码错误的文本。

var specialCharacters = "çõéó";
var goodEncoding = Encoding.UTF8;
var badEncoding = Encoding.GetEncoding(28591);
var badStrings = specialCharacters.Select(c => badEncoding.GetString(goodEncoding.GetBytes(c.ToString())));

var sourceText = "Serviços de Comunicações e Multimédia";
if(badStrings.Any(s => sourceText.Contains(s)))
{
    sourceText = goodEncoding.GetString(badEncoding.GetBytes(sourceText));
}