相关疑难解决方法(0)

如何让 tr 了解非 ascii(unicode)字符?

我正在尝试从文件(UTF-8)中删除一些字符。我tr为此目的使用:

tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat 
Run Code Online (Sandbox Code Playgroud)

文件包含一些外来字符(如“??????????”或“àé”)。tr似乎不理解它们:它将它们视为非 alpha 并删除。

我试过更改我的一些语言环境设置:

LC_CTYPE=C LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=C tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
LC_CTYPE=ru_RU.UTF-8 LC_COLLATE=ru_RU.UTF-8 tr -cs '[[:alpha:][:space:]]' ' ' <testdata.dat
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些都没有奏效。

我怎样才能tr理解Unicode?

linux text-processing unicode tr

38
推荐指数
2
解决办法
1万
查看次数

如何将全角字符转换为半角字符(反之亦然)?

这是我的简单问题,如何从命令行将半角转换为全角。我认为这将内置在我的iconv命令行中,但我在这里没有找到任何内容:

\n
$ iconv  -l | grep -i full\n-> nothing\n$ iconv  -l | grep -i half\n-> nothing\n
Run Code Online (Sandbox Code Playgroud)\n

典型的输入是:

\n
$ echo -n "\xef\xbc\xa1b\xef\xbc\x99\xef\xbc\x98\xef\xbc\x97\xef\xbc\x96\xef\xbc\x95\xef\xbc\x94\xef\xbc\x93\xef\xbc\x92\xef\xbc\x91\xef\xbc\x90" | iconv -f utf8 -t utf16be | hexdump -C\n00000000  ff 21 00 62 ff 19 ff 18  ff 17 ff 16 ff 15 ff 14  |.!.b............|\n00000010  ff 13 ff 12 ff 11 ff 10                           |........|\n00000018\n
Run Code Online (Sandbox Code Playgroud)\n

character-encoding

3
推荐指数
1
解决办法
144
查看次数

如何翻译 Unicode 字符?

我正在尝试将一些字符转换为这样的全角形式

tr 'abcdefghijklmnopqrstuvwxyz' '??????????????????????????'
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用。我进行了搜索,结果发现tr不支持 UTF-8。所以基于那个问题的答案,我尝试使用 perl

tr 'abcdefghijklmnopqrstuvwxyz' '??????????????????????????'
Run Code Online (Sandbox Code Playgroud)

但仍然没有帮助。我尝试了更简单的版本

perl -C -pe 'tr/abcdefghijklmnopqrstuvwxyz/??????????????????????????/'
Run Code Online (Sandbox Code Playgroud)

似乎 perl 仍然将多字节 UTF-8 字符视为字节

如何正确转换这些字符?

character-encoding unicode tr

2
推荐指数
1
解决办法
970
查看次数

标签 统计

character-encoding ×2

tr ×2

unicode ×2

linux ×1

text-processing ×1