我写了一个类似下面的bash,它在Linux终端中很好地响应,因为我用UTF-8对文件进行了编码:
#!/bin/bash
echo 'Olá, möndo!'我需要让用户选择他们认为合适的任何编码,同时仍然在终端中打印正确的变音符号,但是由于终端默认使用UTF-8,所以任何其他编码都会产生各种奇怪的字符。
因此,问题是:用户应该如何在文件中注释bash的编码?bash有没有让我们这样做的模式?
我知道file -I几乎可以正确地检测到文件的编码,但是相关的bashes是以常规的./foo.sh方式执行的。所以,如果终端能自己检测编码就好了。
发布于 2021-03-27 03:10:23
反之亦然。您的脚本知道用户希望在其来自本地LC_MESSAGES的消息中使用的编码,因此您的脚本应该相应地输出采用该编码的文本。它不是终端检测你的脚本,你的脚本为不同的编码提供了它的消息的翻译。LC_MESSAGES也应该有编码信息,所以LC_MESSAGES=en_US.UTF-8不是LC_MESSAGESen_US.EBCDIC。
通常提供翻译的方式是通过gettext。Bash带有内置的gettext支持(但它仍然需要大量的工作才能使其可用),并支持$"..."字符串,参见locale translations。
发布于 2021-03-27 03:22:39
对于更简单的解决方案,您可以使用iconv动态转换。假设您可以将用户的首选编码从他们的语言环境设置提取到$enc中,那么只需
echo 'Olá, möndo!' | iconv -f utf-8 -t "$enc"https://stackoverflow.com/questions/66822889
复制相似问题