如何将包含非 ASCII 字符的参数值传递给 CLI 应用程序?
How to pass argument values containing non-ascii characters to CLI apps?
我无法将 UTF-8 字符串值作为参数正确传递给命令行应用程序。
我尝试过的方法:
- 在双引号之间传递值:"café"
- 用单引号传递:'café'
- 使用字符代码:'caf3'
- 在字符串前使用 $ 符号:$'café'
我正在使用 Mac OS 10.10、iTerm 和我当前的语言环境输出:
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
怀疑这与shell有什么关系。我会确保您的工具(包括编写器工具和您正在阅读的任何工具)完全正确地处理 UTF-8。我最怀疑无论你用什么来阅读你的标签,都会将其解释为 Latin-1 并将其打印出来。您应该使用十六进制编辑器查看文件内部并查找标签。我打赌它是正确的(C3 82,在 UTF-8 中是 é,在 Latin-1 中是 É)。您的输出工具可能是问题所在,而不是作者(绝对不是 shell)。
如果您的阅读工具需要 Latin-1,那么您需要将 é 编码为 E9。 iconv
工具可用于为脚本进行这些转换。
我无法将 UTF-8 字符串值作为参数正确传递给命令行应用程序。
我尝试过的方法:
- 在双引号之间传递值:"café"
- 用单引号传递:'café'
- 使用字符代码:'caf3'
- 在字符串前使用 $ 符号:$'café'
我正在使用 Mac OS 10.10、iTerm 和我当前的语言环境输出:
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
怀疑这与shell有什么关系。我会确保您的工具(包括编写器工具和您正在阅读的任何工具)完全正确地处理 UTF-8。我最怀疑无论你用什么来阅读你的标签,都会将其解释为 Latin-1 并将其打印出来。您应该使用十六进制编辑器查看文件内部并查找标签。我打赌它是正确的(C3 82,在 UTF-8 中是 é,在 Latin-1 中是 É)。您的输出工具可能是问题所在,而不是作者(绝对不是 shell)。
如果您的阅读工具需要 Latin-1,那么您需要将 é 编码为 E9。 iconv
工具可用于为脚本进行这些转换。