哪些字符不能直接映射到Cp1252到UTF-8?

Chr*_*ian 11 utf-8 utf cp1252 character-encoding codepages

我在几个stackoverflow的答案中读到,当从Cp1252(又名Windows-1252;它们是相同的,不是吗?)转换为UTF-8时,某些字符不能直接映射(或者甚至是"不可映射的"),例如:https://stackoverflow.com/a/23399926/2018047

有人可以对此有所了解吗?这是否意味着如果我将源代码从cp1252批量/批量转换为utf-8,我会得到一些最终会成为垃圾的字符?

Kar*_*l S 13

这就是Windows 1252代码页的样子.

如您所见,字节0x81,0x8D,0x8F,0x90,0x9D没有分配任何内容.

如果您的输入文件包含这些字节,并且您将其视为Windows 1252编码,那么这些字节将被视为无效字符.在正常情况下,这意味着输入文件不在Windows 1252中.

所有其他字节都编码可打印字符或控制字符,所有这些字符都以Unicode格式存在,因此可以明确地以UTF-8编码.

我不知道链接的答案试图声称什么,它的最后一段听起来像废话.

还有几个评论,可能会对你想要了解的内容有所启发:

  • UTF-8和Windows 1252在ASCII之外完全不兼容

  • 这两种编码都不会将文本编码为某些字节值,在每种情况下都是不同的

  • 此外,某些字节序列在UTF-8中也是无效的

  • 通常,如果您将文件视为包含以UTF-8或Windows 1252编码的文本,但它没有,则会丢失并损坏数据

您可以在IDE或编辑器中选择文件的编码.建议只使用UTF-8.您将不得不转换现有的Windows 1252文件.

  • 很好的答案,但它需要一个概要:_Unicode是Windows-1252的超集.因此,每个读作Windows-1252的字符都可以写成UTF-8. (7认同)
  • @tom-blodget,这不是与 Karlos S 列出的最后一个要点直接矛盾吗?这不是只适用于 cp1252(即 ANSI)定义的前 128 个字符吗? (2认同)