我读过几个stackoverflow的答案,当从Cp1252(又名Windows-1252;它们是一样的,不是吗?)转换为UTF-8时,某些字符不会直接映射(甚至“不可映射”),例如这里:https ://stackoverflow.com/a/23399926/2018047
有人可以对此有所了解吗?这是否意味着如果我将源代码从 cp1252 批量/批量转换为 utf-8,我会得到一些最终会变成垃圾的字符?
我读过几个stackoverflow的答案,当从Cp1252(又名Windows-1252;它们是一样的,不是吗?)转换为UTF-8时,某些字符不会直接映射(甚至“不可映射”),例如这里:https ://stackoverflow.com/a/23399926/2018047
有人可以对此有所了解吗?这是否意味着如果我将源代码从 cp1252 批量/批量转换为 utf-8,我会得到一些最终会变成垃圾的字符?
如您所见,字节 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 文件。
有人可以对此有所了解吗?
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 之间,包括在内。
接受 UCP 的东西也将接受iso-8859-1,但不接受 cp1252。
这是否意味着如果我将源代码从 cp1252 批量/批量转换为 utf-8,我会得到一些最终会变成垃圾的字符?
不会。cp1252 中的每个字符都映射到一个 Unicode 代码,因此可以使用适当的工具成功地将其转换为 UTF-8。