我在一些堆栈溢出答案中看到,在从Cp1252 (也就是Windows1252;它们是一样的,不是吗?)转换时,一些字符不能直接映射(甚至是“不可映射”)。到UTF-8,例如这里:https://stackoverflow.com/a/23399926/2018047
有没有人能解释一下这件事?这是否意味着,如果我将源代码从cp1252批量/批量转换为utf-8,我会得到一些最终成为垃圾的字符?
发布于 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编码。
我不知道链接的答案是什么,它的最后一段听起来像是胡说八道。
还有几句话,可能会给你想要了解的东西带来一些启发:
您可以在IDE或编辑器中选择文件的编码。建议只使用UTF-8。您必须转换现有的Windows 1252文件。
发布于 2017-12-15 03:47:11
,有没有人能解释一下这件事?
cp1252解码函数主要是身份函数。
cp1252 UCP (UCP = Unicode Code Point)
-------- --------
21 21 (!) (All numbers in hex)
31 31 (1)
41 41 (A)这使得它看起来像是期望UCP (而不是UTF-8)也会接受cp1252。链接答案的作者指出情况并非如此。
cp1252 UCP
-------- --------
80 20AC (€)
85 2026 (…)
99 2122 (™)例外都在80到9F之间,包括80和9F。
接受UCP的东西也会接受iso-8859-1,但不会接受cp1252。
这是否意味着如果我将源代码从cp1252批量/批量转换为utf-8,我会得到一些最终成为垃圾的字符?
不是的。cp1252中的每个字符都映射到一个Unicode Code,因此可以使用适当的工具成功地将其转换为UTF8。
https://stackoverflow.com/questions/26324622
复制相似问题