将损坏的UTF-8文本转换并更正为ANSI?

时间:2014-02-27 12:12:21

标签: vb.net utf-8 character-encoding ansi

我不是专业的开发人员,在将Unicode text转换为ANSI时遇到问题,但遗留应用程序不支持Unicode

以下是在遗留应用程序中显示Unicode编码文本时的样例:

  

échaquejournéedes quatre jours de colloque,entre 250 et 500   personnes sont场地assister en continu aux discussion de cette   论战。 Cette富裕,ainsi que la richesse etlavariétédes   讨论参与者,确认la   néessesséd'un espace ouvert pourlespensé©critiques dans le   monde francophone,Ãl'universitéet bien au-delÃ。

我注意到以下事项:

  • 所有变音字符编码为C3(“Ô)+第二个字节
  • 字符“à”被错误编码为C320(“Ô)
  • Windows的CharacterMap应用程序说“é”是“U + 00E9”而文档包含C3A9。

我有几个问题:

  1. 为什么文档与CharacterMap之间存在差异:是 以Unicode之外的其他内容编码的文档?例如,为什么 被é编码为C3A9而不是00E9

  2. 我使用以下VB.Net代码将文档从Unicode转换为Ansi:如何将所有C320替换为à

    Dim Encw1252 As Encoding = Encoding.GetEncoding("windows-1252")
    Dim EncUTF8 As Encoding = Encoding.GetEncoding("utf-8")
    Dim Str As String
    Str = Encw1252.GetString(Encoding.Convert(EncUTF8, Encw1252, encoding.Default.GetBytes(Clipboard.GetText)))
    Clipboard.SetText(Str)
    

1 个答案:

答案 0 :(得分:0)

(在问题编辑中回答。转换为社区维基回答。请参阅What is the appropriate action when the answer to a question is added to the question itself?

OP写道:

  

对于其他人'利益,使用以下代码解决问题:

Dim Encw1252 As Encoding = Encoding.GetEncoding("windows-1252")
Dim EncUTF8 As Encoding = Encoding.GetEncoding("utf-8")

Dim Str As String
Str = Clipboard.GetText
Str = Str.Replace("Ã ", "Ã ")
Str = Encw1252.GetString(Encoding.Convert(EncUTF8, Encw1252, Encoding.Default.GetBytes(Str)))
Clipboard.SetText(Str)
MessageBox.Show(Str)
     

在上面的Str.Replace()中,源中的第二个字节是空格(20),而目标中的第二个字节是"没有中断空格" (160)。