1

我正在做一些文本处理,我需要将一个字符串切割成短子字符串。我使用了 cut 但它似乎会根据字节切割我的字符串。我的文本是多字节 utf8 编码文本的混合,使用 cut 通常会导致最后几个字节是无效的 utf8 字节,这会给我的进一步处理带来问题。所以我想知道是否有合适的方法来做到这一点?

PS我已经尝试过 -c 参数,但它仍然会减少字节数。

例如(机器语言环境为 en_GB.UTF-8)

echo "非常的危险" | 剪切-c -6

是非

echo "非常的危险" | 剪切-c -7

是非

echo "非常的危险" | 剪切-c -8

是非

echo "非常的危险" | 剪切-c -9

是非常</p>

4

1 回答 1

2

感谢评论的人,显然这是 linux coreutils 中的一个已知错误:

http://lists.gnu.org/archive/html/bug-coreutils/2006-07/msg00044.html

追溯到2006年!

在 iconv -c 的帮助下,我有一个“解决方法”,它将忽略非法字节。

echo "是非常的危險" | cut -c -7 | iconv -c

这将产生有效的序列“是非”(最后没有额外的非法字节)

于 2013-09-10T13:14:13.087 回答