中文字符到底占几个字节?

sh/bash/dash/ksh/zsh等Shell脚本
回复
Messiya
帖子: 61
注册时间: 2009-12-02 15:49

中文字符到底占几个字节?

#1

帖子 Messiya » 2010-12-07 19:34

有这个一个文件 a.txt
——————————————————————
13623652956 乌鲁木齐
13298652397 北京
——————————————————————
cat a.txt| awk '{if (length($2)==8) print $0}'
有时候输出正常
13623652956 乌鲁木齐
有时候,就没有输出,需要改成length($2)==4,才正常

这是怎么回事啊
头像
退避九舍
帖子: 742
注册时间: 2010-08-08 20:02
系统: Ubuntu 22.04

Re: 中文字符到底占几个字节?

#2

帖子 退避九舍 » 2010-12-07 19:51

编码不同,长度不同。。。
退避九舍:富贵不能淫,贫贱不能移,威武不能屈:坚持ubuntu不动摇!
Messiya
帖子: 61
注册时间: 2009-12-02 15:49

Re: 中文字符到底占几个字节?

#3

帖子 Messiya » 2010-12-07 20:00

退避九舍 写了:编码不同,长度不同。。。
在同一个机器上运行,怎么还会变啊
是不是可以指定编码啊
头像
astolia
论坛版主
帖子: 6445
注册时间: 2008-09-18 13:11

Re: 中文字符到底占几个字节?

#4

帖子 astolia » 2010-12-09 11:26

这个问题首先要看你当前的终端语言编码和文件编码。当两者一致时,awk的统计是按字符而非字节来算的。当不一致,就说不清到底算成多少个了

经过测试如下

“乌鲁木齐”长度:
当控制台为UTF8,文件为UTF8时,长度为4
当控制台为GBK,文件为GBK时,长度为4
当控制台为UTF8,文件为GBK时,长度为8
当控制台为GBK,文件为UTF8时,长度为6

代码: 全选

echo $LANG
来看当前终端的编码

代码: 全选

file a.txt
来看文件编码,注意如果是GBK的话,会被当作ISO-8859

要设置终端编码,用

代码: 全选

export LANG=zh_CN.UTF8   #设置成UTF8
export LANG=zh_CN.GBK   #设置成GBK
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 中文字符到底占几个字节?

#5

帖子 eexpress » 2010-12-09 11:32

不要试图用字节去处理中文。
● 鸣学
头像
icmmed
帖子: 46
注册时间: 2010-12-03 11:08

Re: 中文字符到底占几个字节?

#6

帖子 icmmed » 2010-12-15 17:59

:em11
我喜欢忙一点...
Lost Temple...
回复