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
  1. echo '由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。'|awk '{print "str1=\042"substr($0,1,17)"\042";print "str2=\042"substr($0,18,50)"\042"}'
  2. str1="由于中秋国庆长假8天,Na座及以下"
  3. str2="小客车高速路免收通行费,享受a大餐。"
复制代码

作者: 九天共揽    时间: 2012-10-08 17:49
本帖最后由 九天共揽 于 2012-10-08 17:56 编辑
  1. echo '由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。'|awk '{print "str1=\042"substr($0,1,17)"\042";print "str2=\042"substr($0,18,50)"\042"}'

  2. str1="由于中秋国庆长假8天,Na座及以下"

  3. 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# 九天共揽

不太明白是什么问题。
  1. 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"}'
  2. str1="由adff于中秋国庆长假8天,Na"
  3. str2="asfdafdasf座及以下sfd小客车asdf高速路dasfas免收通行费,享受a大餐。"
复制代码
\042 是什么意思呀~
  1. awk 'BEGIN{print "\042"}'
  2. "
  3. awk 'BEGIN{print "\42"}'
  4. "
复制代码

作者: 九天共揽    时间: 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