我需要消除一个大的.xml文件中的特殊字符。因此,我需要一个文件从UTF-8转换为US-ASCII。我相信我应该能够使用iconv
通过以下命令来完成此操作:
iconv -f UTF-8 -t US-ASCII//TRANSLIT//IGNORE sample1.xml -o sample2.xml
下面是输入文件的几行:
- ...从regjsparser的AST...
- ...正在返回...的“符号”
- ......一米一纳一克斯→一米二纳一克斯......
- 安德烈·克鲁兹...
- 凯特·马钱...
下面是这些代码片段的输出:
- ...来自regjsparser的AST...(用撇号替换右侧单引号)
- ...返回...的“symbol”(将左/右双引号替换为常规引号)
- ...
foo-bar
-〉fooBar
...(将向右箭头替换为破折号和大于) - ... Andr?Cruz...(未能识别急性E / U+00 E9/将其替换为常规E)
- ...... Kat March?n......(未能识别急性A / U+00 E1/将其替换为常规A)
很明显这个工具是可以工作的,因为它替换了一些字符,但是它永远不能替换重音字母。这些文件是CycloneDX生成的BOM文件,所以它们最初应该是UTF-8编码的。机器上安装的iconv
来自Debian 2.31 GLIBC库。
我不知道它为什么要处理重音字符。
编辑:这是locale
和locale -a
命令的打印输出。不确定这些值是否与此问题相关。
场所
+ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
区域设置-a
+ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.UTF-8
POSIX
我很难理解这些LC值意味着什么以及它们是如何工作的。
1条答案
按热度按时间1zmg4dgp1#
已通过运行以下命令修复此问题
看起来
locale
参数的原始值默认为en-US.UTF-8
,即使它在机器上不存在。所以你需要运行locale -a
来确定你有什么选项,并选择一个最适合你的需要。看起来大多数标签为xx.UTF-8
的东西都可以用于翻译目的。我了解到这个导出的值只在当前会话中应用,并且每次启动新会话时都需要重置。如果您想永久设置
locale
值,您需要执行以下操作:https://www.tecmint.com/set-system-locales-in-linux/