Chinaunix
标题:
unix shell中将一串中英文字符串分割成二段字符串,怎么避免半个字符乱码
[打印本页]
作者:
九天共揽
时间:
2012-10-08 12:33
标题:
unix shell中将一串中英文字符串分割成二段字符串,怎么避免半个字符乱码
本帖最后由 九天共揽 于 2012-10-08 14:31 编辑
unix shell中要将一串随机的“中英文字符串”按长度分割,或大概分成2段,怎么避免第二段乱码!
我用substr按长度取第二段的时候,有50%的概率是乱码!!!请高手帮忙!!!
比如:str="由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。"
把这个中英文字符串分成2段:
str1=“由于中秋国庆长假8天,Na座及以下"
str2="小客车高速路免收通行费,享受a大餐。"
按照substr长度截取后面会碰到半个字符,然后 str2这个段都是乱码!!!要把长度+1或-1后才能正常。
作者:
jiaogeshahaone
时间:
2012-10-08 13:36
比如。。。。。。
作者:
kk5234
时间:
2012-10-08 15:31
echo '由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。'|awk '{print "str1=\042"substr($0,1,17)"\042";print "str2=\042"substr($0,18,50)"\042"}'
str1="由于中秋国庆长假8天,Na座及以下"
str2="小客车高速路免收通行费,享受a大餐。"
复制代码
作者:
九天共揽
时间:
2012-10-08 17:49
本帖最后由 九天共揽 于 2012-10-08 17:56 编辑
echo '由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。'|awk '{print "str1=\042"substr($0,1,17)"\042";print "str2=\042"substr($0,18,50)"\042"}'
str1="由于中秋国庆长假8天,Na座及以下"
str2="小客车高速路免收通行费,享受a大餐。"
复制代码
str的长度大概都是在68字节,但是,我只是举个例子,因为str串不一定就是:“由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。”
还有可能是其他的长度差不多的中英文字符串
一旦前面多一个英文,"str1=\042"substr($0,1,17)"\042 就会导致后面有半个字符呀!就乱码了!! \042 是什么意思呀~!
作者:
kk5234
时间:
2012-10-08 18:25
本帖最后由 kk5234 于 2012-10-08 18:28 编辑
回复
4#
九天共揽
不太明白是什么问题。
echo '由adff于中秋国庆长假8天,Naasfdafdasf座及以下sfd小客车asdf高速路dasfas免收通行费,享受a大餐。'|awk '{print "str1=\042"substr($0,1,17)"\042";print "str2=\042"substr($0,18,68)"\042"}'
str1="由adff于中秋国庆长假8天,Na"
str2="asfdafdasf座及以下sfd小客车asdf高速路dasfas免收通行费,享受a大餐。"
复制代码
\042 是什么意思呀~
awk 'BEGIN{print "\042"}'
"
awk 'BEGIN{print "\42"}'
"
复制代码
作者:
九天共揽
时间:
2012-10-09 15:04
str=由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。
这个中英文串,只是我举个例子,你这样写针对这个串可以的,但是你不能避免出现乱码,因为就算每个串的长度是一样,但是第17个字节和18个字节是个汉字,你就乱码了,你把一个字分成2半了
作者:
jason680
时间:
2012-10-09 16:59
回复
1#
九天共揽
How about this
# echo $str | awk -F '' '{s=int(NF/2);for(n=1;n<=NF;n++){printf("%s",$n);if(n==s)print""}print""}'
由于中秋国庆长假8天,Na座及以下
小客车高速路免收通行费,享受a大餐。
作者:
九天共揽
时间:
2012-10-09 17:08
因为里面有英文,所以还是不行哦
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2