首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些字符不能直接从Cp1252映射到UTF-8?

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

Stack Overflow用户
提问于 2014-10-12 19:27:08
回答 2查看 67.7K关注 0票数 17

我在一些堆栈溢出答案中看到,在从Cp1252 (也就是Windows1252;它们是一样的,不是吗?)转换时,一些字符不能直接映射(甚至是“不可映射”)。到UTF-8,例如这里:https://stackoverflow.com/a/23399926/2018047

有没有人能解释一下这件事?这是否意味着,如果我将源代码从cp1252批量/批量转换为utf-8,我会得到一些最终成为垃圾的字符?

EN

回答 2

Stack Overflow用户

发布于 2014-10-13 05:37:22

This is how Windows 1252 codepage looks like.

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

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

所有其他字节要么编码可打印字符,要么编码控制字符,所有这些字符都以Unicode表示,因此可以明确地以UTF-8编码。

我不知道链接的答案是什么,它的最后一段听起来像是胡说八道。

还有几句话,可能会给你想要了解的东西带来一些启发:

  • UTF-8和Windows1252在ASCII
  • 之外完全不兼容这两种编码都不会将文本编码为特定的字节值,每种情况下都不同。此外,某些字节序列在UTF-8
  • 中通常也是无效的。如果您将文件视为包含以UTF-8或Windows1252编码的文本,但事实并非如此,您将丢失和损坏data

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

票数 20
EN

Stack Overflow用户

发布于 2017-12-15 03:47:11

,有没有人能解释一下这件事?

cp1252解码函数主要是身份函数。

代码语言:javascript
复制
cp1252    UCP       (UCP = Unicode Code Point)
--------  --------
21        21 (!)    (All numbers in hex)
31        31 (1)
41        41 (A)

这使得它看起来像是期望UCP (而不是UTF-8)也会接受cp1252。链接答案的作者指出情况并非如此。

代码语言:javascript
复制
cp1252    UCP
--------  --------
80        20AC (€)
85        2026 (…)
99        2122 (™)

例外都在80到9F之间,包括80和9F。

接受UCP的东西也会接受iso-8859-1,但不会接受cp1252。

这是否意味着如果我将源代码从cp1252批量/批量转换为utf-8,我会得到一些最终成为垃圾的字符?

不是的。cp1252中的每个字符都映射到一个Unicode Code,因此可以使用适当的工具成功地将其转换为UTF8。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26324622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档