我正在进行一些文本处理,我需要将一个字符串剪切成短子串。我使用剪切但似乎它将根据字节切割我的字符串。我的文本是多字节,utf8编码文本的混合,使用剪切通常会导致最后几个字节是无效的utf8字节,这将导致我进一步处理的问题。所以我想知道是否有正确的方法来做到这一点?
P.S。我尝试了-c参数但它仍然削减了字节。
示例,(机器区域设置为en_GB.UTF-8)
echo“是非常的危险”|切-c -6
是非
echo“是非常的危险”|切-c -7
是非
echo“是非常的危险”|切-c -8
是非
echo“是非常的危险”|切-c -9
是非常
答案 0 :(得分:2)
感谢评论的人,显然这是linux coreutils中的已知错误:
http://lists.gnu.org/archive/html/bug-coreutils/2006-07/msg00044.html
早在2006年!
我在iconv -c的帮助下有一个“解决方法”,它会忽略非法字节。
echo "是非常的危險" | cut -c -7 | iconv -c
将产生有效序列“是非”(最后没有额外的非法字节)