将 ANSI 转换为 UTF-8 然后再转换回 ANSI 是否安全(不会丢失数据)?
我有读从 UTF-8 转换为 ANSI 时可能会丢失数据。
但是,如果文件从 ANSI 更改为 UTF-8(并且在 UTF-8 中没有进一步更改)然后再更改回 ANSI,这是否 100% 安全?
答案1
这可能是安全的,但前提是两次都在相同的编码之间进行转换。
UTF-8 本身并不是一个字符集——它是一种将 Unicode 编码为字节的方法。它可以表示与 UTF-16(现代 Windows 使用的编码)相同的字符。因此,真正的问题是,是否要转换为统一码可能会丢失信息——据我所知,答案是“它不应该,但它有时可能”:
旧事物新 有脚注对这个:
附加闲聊:即使从 ANSI 到 Unicode 再返回 ANSI 的往返也可能会有损失,这取决于您传递的有关使用预组合字符的标志。
Unicode 有几种规范形式 - 例如,
ã
既可以存储为单个代码点(预组合),也可以存储为普通a
+ 组合波浪符号(分解)。Windows 更喜欢前者,而 macOS 更喜欢后者。¥
我不完全确定例如 Windows-932 是否算作“ANSI”,但如果由于相同的字节同时作为符号和路径分隔符(通常是反斜杠)而出现问题(如维基百科上提到的),我不会感到惊讶...
同时,没有称为“ANSI”的编码或代码页。它是一个标准组织的名称,该组织定义了几种文本编码。在 Windows 中,该术语表示针对不同国家/地区和语言的大量“Windows-125x”编码(有点对应于 ISO 8859 编码,据称基于 ANSI 编写的早期草案)。
因此,一个系统很可能将 Windows-1251 称为“ANSI”,而另一个系统则将 Windows-1257 称为“ANSI”,因此,每个系统都可以表示另一个系统无法表示的字符。(事实上,最新的 Windows 10.1809 甚至允许 UTF-8 作为“ANSI”编码。)在配置不同的系统的情况下,即使最初转换为 Unicode 不会丢失信息,转换后退改为“ANSI”即可。