如何解决如何在 perl 中将 ascii 编码文件转换为 utf-8 编码?
我想将一个 ascii 编码的文本文件转换为 utf-8 编码。 到目前为止,我已经尝试过这个:
open( my $test,">:encoding(utf-8)",$test_file ) or die("Error: Could not open file!\n");
并运行以下显示文件编码的命令
file $test_file
test_file: ASCII text
如果我在这里遗漏了什么,请告诉我。
解决方法
任何 ASCII 格式的文件(即只包含 0 到 127 的代码点)都已经是 UTF-8 格式了。编码没有区别,因此 file
无法将其识别为 UTF-8。
编码的差异只发生在代码点从 128 开始的字符上。
它是为向后兼容 ASCII 设计的:Unicode 的前 128 个字符与 ASCII 一一对应,使用与 ASCII 具有相同二进制值的单个字节进行编码,因此有效的 ASCII 文本是有效的UTF-8 编码的 Unicode 也是如此。
(来自Wikipedia article on UTF-8)
,你做对了。
ASCII 是 UTF-8 的子集。
decode encode
ASCII ⇒ Unicode ⇒ UTF-8
---------- ---------- ----------
00 U+0000 00
01 U+0001 01
02 U+0002 02
⋮ ⋮ ⋮
7E U+007E 7E
7F U+007F 7F
---------- ---------- ----------
ASCII ⇐ Unicode ⇐ UTF-8
encode decode
因此,ASCII 文件是 UTF-8 文件。[1]
当您仅使用该子集时,file
会将文件标识为使用 ASCII 编码。
$ perl -M5.010 -e'use utf8; use open ":std",":encoding(UTF-8)"; say "abcdef"' | file -
/dev/stdin: ASCII text
离开该子集会导致 file
将文件识别为使用 UTF-8 编码的文本。
$ perl -M5.010 -e'use utf8; use open ":std",":encoding(UTF-8)"; say "abcdéf"' | file -
/dev/stdin: UTF-8 Unicode text
- 它也是一个iso-latin-1文件,iso-latin-2文件,iso-latin-3文件,一个cp1250文件,一个cp1251文件,一个cp1252文件等等,等等
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。