免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3040 | 回复: 7
打印 上一主题 下一主题

[文本处理] unix shell中将一串中英文字符串分割成二段字符串,怎么避免半个字符乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-08 12:33 |只看该作者 |倒序浏览
本帖最后由 九天共揽 于 2012-10-08 14:31 编辑

unix shell中要将一串随机的“中英文字符串”按长度分割,或大概分成2段,怎么避免第二段乱码!
我用substr按长度取第二段的时候,有50%的概率是乱码!!!请高手帮忙!!!

比如:str="由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。"
把这个中英文字符串分成2段:
       str1=“由于中秋国庆长假8天,Na座及以下"
         str2="小客车高速路免收通行费,享受a大餐。"
按照substr长度截取后面会碰到半个字符,然后 str2这个段都是乱码!!!要把长度+1或-1后才能正常。

论坛徽章:
1
2015亚冠之吉达阿赫利
日期:2015-09-09 16:42:38
2 [报告]
发表于 2012-10-08 13:36 |只看该作者
比如。。。。。。

论坛徽章:
0
3 [报告]
发表于 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大餐。"
复制代码

论坛徽章:
0
4 [报告]
发表于 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 是什么意思呀~!

论坛徽章:
0
5 [报告]
发表于 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. "
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-10-09 15:04 |只看该作者
str=由于中秋国庆长假8天,Na座及以下小客车高速路免收通行费,享受a大餐。
这个中英文串,只是我举个例子,你这样写针对这个串可以的,但是你不能避免出现乱码,因为就算每个串的长度是一样,但是第17个字节和18个字节是个汉字,你就乱码了,你把一个字分成2半了

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 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大餐。

   

论坛徽章:
0
8 [报告]
发表于 2012-10-09 17:08 |只看该作者
因为里面有英文,所以还是不行哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP