【问题标题】:Conversion from UTF8 to ASCII从 UTF8 转换为 ASCII
【发布时间】:2011-05-20 03:04:34
【问题描述】:

我从以 UTF8 编码存储的 XML 文件中读取了一个文本。 C# 完美读取它,我使用调试器进行了检查,但是当我尝试将其转换为 ASCII 以将其保存在另一个文件中时,我得到一个 ?字符在有冲突的地方出现。例如,这段文字:

string s = "La introducción masiva de las nuevas tecnologías de la información";

将保存为

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n"

我不能只用它们的拉丁语 (a, e, i, o, u) 元音替换它们,因为西班牙语中的某些单词会失去意义。我已经尝试过thisthis 的问题,但没有成功。所以我希望有人可以帮助我。第二个中选择的答案甚至没有编译...!

如果有人想看看,我的代码是这个:

private void WriteInput( string input )
{
   byte[] byteArray = Encoding.UTF8.GetBytes(input);
   byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray);
   string finalString = Encoding.ASCII.GetString(asciiArray);

   string inputFile = _idFile + ".in";
   var batchWriter = new StreamWriter(inputFile, false, Encoding.ASCII);
   batchWriter.Write(finalString);
   batchWriter.Close();
}

【问题讨论】:

    标签: c# encoding utf-8 ascii


    【解决方案1】:

    这些字符在 ASCII 中没有映射。查看 ASCII 表,例如 Wikipedia's,以验证这一点。您可能对 Windows 1252 编码或“扩展 ASCII”感兴趣,因为它有时被称为,它具有许多重音字符的代码点,包括西班牙语。

    var input = "La introducción masiva de las nuevas tecnologías de la información";
    var utf8bytes = Encoding.UTF8.GetBytes(input);
    var win1252Bytes = Encoding.Convert(
                    Encoding.UTF8, Encoding.GetEncoding("windows-1252"), utf8bytes);
    File.WriteAllBytes(@"foo.txt", win1252Bytes);
    

    【讨论】:

    • @David:使用上面的测试用例,对我来说非常适合。确保您的代码中没有 ASCII 编码 (Encoding.ASCII)。
    • 对不起!再次测试并像魅力一样工作......现在我知道为什么你有 18.3K 代表了! ;)
    • 如果可以的话,我会添加更多的 +1! :)
    【解决方案2】:

    做不到。 ASCII 没有这些字母,所以你能做的最好的就是对它们进行 URL 编码或 unicode-escape-encode。

    【讨论】:

    • 怎么回事?如果 ASCII 没有这些字母,我如何使用 Notepad++ 将编码从 UTF8 更改为 ASCII 并像魅力一样工作?
    • 因为 Notepad++ 并没有真正使用 ASCII。它使用像 CP1250 这样的东西,确实有这些字母。
    • Notepad++ 转换为 Win-1252 代码页(拉丁文),在表的上半部分有重音符号(字符代码 128+)。但是,这不是 ASCII,而是 ASCII 的扩展。 ASCII 仅定义 0-127 范围内的字符。同时,在具有不同代码页的机器上打开该文件,将显示不同的字符来代替重音字符。例如,在 Win-1251 中,您会看到一些西里尔字母。
    猜你喜欢
    • 1970-01-01
    • 2015-06-04
    • 2018-05-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2017-03-30
    • 2012-01-09
    相关资源
    最近更新 更多