Dev Asked: 2021-11-24 08:01:36 +0800 CST2021-11-24 08:01:36 +0800 CST 2021-11-24 08:01:36 +0800 CST 从 Z-Shell 创建具有不同字符编码的文件 772 我试图更好地理解字符编码。为了进行实验,我想获取一串字符并以不同的方式进行编码。zsh prompt 是否有办法创建使用特定字符编码的文件?例如,我正在尝试创建使用以下字符编码的文件: ASCII 统一码 UTF32 UTF8 我希望看到以这些编码中的每一个编码的相同字符串来比较和对比它们。谢谢你。 encoding zsh 1 个回答 Voted Best Answer user1686 2021-11-24T08:18:58+08:002021-11-24T08:18:58+08:00 作为一个shell, zsh 大多不直接处理这些事情——但你可以通过zsh 运行其他程序来做到这一点。(当然,与大多数其他 shell 不同,zsh 尤其具有非常丰富的内置功能,但字符编码转换似乎不是其中之一。) 要在 shell 中转换字符编码,通常iconv使用该工具——该-f选项指定要转换的编码;-t目标编码;从标准输入读取数据。例如: echo "Here are some arrows ?, ?, ?, ?" > text_in_utf8.txt iconv -f utf-8 -t utf-16 < text_in_utf8.txt > text_in_utf16.txt (通常系统语言环境设置为 UTF-8,因此您直接在 shell 中输入的任何内容(例如echo上例中的内容)也将最终为 UTF-8。但请务必使用 进行检查locale charmap。) 其他字符编码,例如iso8859-1或ibm437也可用;查看iconv -l列表。(请注意,“Unicode”只是抽象字符集,本身并不是编码。当您在 Windows 中看到“Unicode”作为编码时,实际上意味着 UTF-16,或者在非常旧的版本中是 UCS-2)。 还有其他方法可以试验字符编码。例如,在 Python 中,您可以.encode()使用特定编码将 Unicode 字符串转换为字节,或者.decode()将字节返回 Unicode 字符串: $ python >>> text = "? ? ? ?" >>> utf8bytes = text.encode("utf-8") >>> utf16bytes = text.encode("utf-16") >>> ["%02x" % b for b in utf8bytes] ['f0', '9f', 'a0', '88', '20', 'f0', '9f', 'a0', '8a', '20', 'f0', '9f', 'a0', '89', '20', 'f0', '9f', 'a0', '8b'] (在这种情况下,我的意思是抽象意义上的“Unicode 字符串”,与前面的注释不同。)
作为一个shell, zsh 大多不直接处理这些事情——但你可以通过zsh 运行其他程序来做到这一点。(当然,与大多数其他 shell 不同,zsh 尤其具有非常丰富的内置功能,但字符编码转换似乎不是其中之一。)
要在 shell 中转换字符编码,通常
iconv
使用该工具——该-f
选项指定要转换的编码;-t
目标编码;从标准输入读取数据。例如:(通常系统语言环境设置为 UTF-8,因此您直接在 shell 中输入的任何内容(例如
echo
上例中的内容)也将最终为 UTF-8。但请务必使用 进行检查locale charmap
。)其他字符编码,例如
iso8859-1
或ibm437
也可用;查看iconv -l
列表。(请注意,“Unicode”只是抽象字符集,本身并不是编码。当您在 Windows 中看到“Unicode”作为编码时,实际上意味着 UTF-16,或者在非常旧的版本中是 UCS-2)。还有其他方法可以试验字符编码。例如,在 Python 中,您可以
.encode()
使用特定编码将 Unicode 字符串转换为字节,或者.decode()
将字节返回 Unicode 字符串:(在这种情况下,我的意思是抽象意义上的“Unicode 字符串”,与前面的注释不同。)