在 unicode 文件的每个字符后添加 space 时出现区域设置错误?
Locale error when adding a space after each character for a unicode file?
我想为文本文件中的每个字符添加空格
in.txt
在吗??
嗯
你让我看的那款手提是不是11寸的,很小的?
看来还是美国的便宜啊
应该是吧
out.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美 国 的 便 宜 啊
应 该 是 吧
我试过这个 (How to remove/add spaces in all textfiles?) 但它输出:
� � � � � � � � � � � �
� � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 1 � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � �
如何实现out.txt
?
我也试过:
$ perl -F'' -C -lane 'print join " ", @F' in.txt
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "de_DE.UTF-8",
LC_ADDRESS = "de_DE.UTF-8",
LC_MONETARY = "de_DE.UTF-8",
LC_NUMERIC = "de_DE.UTF-8",
LC_TELEPHONE = "de_DE.UTF-8",
LC_IDENTIFICATION = "de_DE.UTF-8",
LC_MEASUREMENT = "de_DE.UTF-8",
LC_TIME = "de_DE.UTF-8",
LC_NAME = "de_DE.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
� � � � � � � � � � � �
� � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 1 � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � �
和
$ cat in.txt 在吗??
嗯
你让我看的那款手提是不是11寸的,很小的?
看来还是美国的便宜啊
应该是吧
$ sed 's/\s/g;s/./& /g' in.txt
sed: -e expression #1, char 10: unknown option to `s'
我的语言环境似乎有问题:
$ locale
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=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
要修复它,我必须这样做:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
然后:
$ perl -F'' -C -lane 'print join " ", @F' in.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美
假设您正确设置了 UTF-8 语言环境,您可以使用这个 Perl 单行代码:
perl -F'' -C -lane 'print join " ", @F' in.txt > out.txt
-a
开关在字段分隔符上拆分输入,该分隔符已设置为空字符串,因此每个字符都是数组 @F
中的一个单独元素。由于这里使用了join
,因此在该行的最后一个字符之后没有添加space(不清楚是否应该有)。
另一种选择是使用替换:
perl -C -pe 's/(.)/ /g' in.txt > out.txt
这将在每个字符后添加一个 space,包括最后一个字符。
检查UTF-8是否设置正确,
env | grep -i utf
LANG=en_US.UTF-8
您可以参考以下link了解更多关于语言设置的信息。
http://perlgeek.de/en/article/set-up-a-clean-utf8-environment
下面的单行效果很好。
sed 's/\s/g;s/./& /g' in.txt
这是示例输出:
sed 's/\s//g;s/./& /g' in.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美 国 的 便 宜 啊
应 该 是 吧
我想为文本文件中的每个字符添加空格
in.txt
在吗??
嗯
你让我看的那款手提是不是11寸的,很小的?
看来还是美国的便宜啊
应该是吧
out.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美 国 的 便 宜 啊
应 该 是 吧
我试过这个 (How to remove/add spaces in all textfiles?) 但它输出:
� � � � � � � � � � � �
� � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 1 � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � �
如何实现out.txt
?
我也试过:
$ perl -F'' -C -lane 'print join " ", @F' in.txt
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "de_DE.UTF-8",
LC_ADDRESS = "de_DE.UTF-8",
LC_MONETARY = "de_DE.UTF-8",
LC_NUMERIC = "de_DE.UTF-8",
LC_TELEPHONE = "de_DE.UTF-8",
LC_IDENTIFICATION = "de_DE.UTF-8",
LC_MEASUREMENT = "de_DE.UTF-8",
LC_TIME = "de_DE.UTF-8",
LC_NAME = "de_DE.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
� � � � � � � � � � � �
� � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1 1 � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � � � � � � � � � � � � � � � � � � �
� � � � � � � � � � � �
和
$ cat in.txt 在吗??
嗯
你让我看的那款手提是不是11寸的,很小的?
看来还是美国的便宜啊
应该是吧
$ sed 's/\s/g;s/./& /g' in.txt
sed: -e expression #1, char 10: unknown option to `s'
我的语言环境似乎有问题:
$ locale
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=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
要修复它,我必须这样做:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
然后:
$ perl -F'' -C -lane 'print join " ", @F' in.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美
假设您正确设置了 UTF-8 语言环境,您可以使用这个 Perl 单行代码:
perl -F'' -C -lane 'print join " ", @F' in.txt > out.txt
-a
开关在字段分隔符上拆分输入,该分隔符已设置为空字符串,因此每个字符都是数组 @F
中的一个单独元素。由于这里使用了join
,因此在该行的最后一个字符之后没有添加space(不清楚是否应该有)。
另一种选择是使用替换:
perl -C -pe 's/(.)/ /g' in.txt > out.txt
这将在每个字符后添加一个 space,包括最后一个字符。
检查UTF-8是否设置正确,
env | grep -i utf
LANG=en_US.UTF-8
您可以参考以下link了解更多关于语言设置的信息。
http://perlgeek.de/en/article/set-up-a-clean-utf8-environment
下面的单行效果很好。
sed 's/\s/g;s/./& /g' in.txt
这是示例输出:
sed 's/\s//g;s/./& /g' in.txt
在 吗 ? ?
嗯
你 让 我 看 的 那 款 手 提 是 不 是 1 1 寸 的 , 很 小 的 ?
看 来 还 是 美 国 的 便 宜 啊
应 该 是 吧