gpt4 book ai didi

python - 如何在命令行上处理 utf8(使用 Perl 或 Python)?

转载 作者:太空狗 更新时间:2023-10-29 17:00:21 30 4
gpt4 key购买 nike

如何在命令行上使用 Perl(或 Python)处理 utf8?

例如,我正在尝试拆分每个单词中的字符。这对于非 utf8 文本非常容易,例如:

$ echo "abc def" | perl -ne 'my @letters = m/(.)/g; print "@letters\n"' | less
a b c d e f

但是对于 utf8 它当然不起作用:

$ echo "одобрение за" | perl -ne 'my @letters = m/(.)/g; print "@letters\n"' | less
<D0> <BE> <D0> <B4> <D0> <BE> <D0> <B1> <D1> <80> <D0> <B5> <D0> <BD> <D0> <B8> <D0> <B5> <D0> <B7> <D0> <B0>

因为它不知道 2 字节的字符。

最好知道这(即 utf8 的命令行处理)是如何在 Python 中完成的。

最佳答案

“-C”标志控制一些 Perl Unicode 特性(参见 perldoc perlrun):

$ echo "одобрение за" | perl -C -pe 's/.\K/ /g'
о д о б р е н и е з а

要指定用于标准输入/标准输出的编码,您可以使用 PYTHONIOENCODING 环境变量:

$ echo "одобрение за" | PYTHONIOENCODING=utf-8 python -c'import sys
for line in sys.stdin:
print " ".join(line.decode(sys.stdin.encoding)),
'
о д о б р е н и е з а

如果您想在字符(字素)边界上拆分文本(而不是像上面的代码那样在代码点上),那么您可以使用 /\X/ 正则表达式:

$ echo "одобрение за" | perl -C -pe 's/\X\K/ /g'
о д о б р е н и е з а

参见 Grapheme Cluster Boundaries

在 Python 中 \Xregex module 支持.

关于python - 如何在命令行上处理 utf8(使用 Perl 或 Python)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730835/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com