免费注册 查看新帖 |

Chinaunix

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

文本处理求助第三弹-如何删除文本中的中文乱码? [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-03-04 21:52 |只看该作者 |倒序浏览
大家好!
我还有一个文本处理的问题向大家请教:
我用Perl脚本从数据库中读取数据生成了一个文本文件。


|No|AR-------|Description-------------------------------------------------|State------|Assigned Group---------|NCCD------[Day]|JIRA---------------|
| 1|1-6350029|C-Pipes created via OC-3 STM port operationaly down         |Resolved   |CloQ-IPD-SR&SSR-vGlobal|2016-11-29[-95]|                   |
| 2|1-6443085|DP11.3b: Command output of MCAST for 7450 CLI on SROS 13R8  |Resolved   |CloQ-IPD-SR&SSR-vGlobal|2016-11-29[-95]|                   |
| 3|1-6477220|(B2B Court 7210) 7210 SAS rebooted without any reason       |Pending    |TSCr-IPD-APAC          |2017-01-31[-32]|corp-jira:SAS-1805 |
| 4|1-6496243|[WCP][FOA][WCP-FOA001]7750 MG issue on Oct 19 (CSR respon...|Resolved   |CloQ-IPD-SR&SSR-vGlobal|2017-03-12[  7]|corp-jira:SR-24356 |
| 5|1-6527369|Can’t Login MDN-TBG-EN2-SAR8                              |Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-06[  1]|                   |
| 6|1-6528649|[WideEther][TKEvrs-45][production]  1/1/1 MC-LAG 51 has s...|Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-24[ 19]|corp-jira:ESS-6137 |
| 7|1-6536745|(KT GOA 7750) Firewall session initiation is strange        |In Progress|NorP-IPD-SR&SSR-vGlobal|2017-03-10[  5]|corp-jira:SR-25263 |
| 8|1-6559753|"pppoeCreateESMObjects: SBM IPCP session is already created"|Resolved   |CloQ-IPD-SR&SSR-vGlobal|2017-02-28[ -4]|corp-jira:SR-25724 |


这个文本应该是纯英文的,但是由于输入者的操作系统可能是中文的,所以在输入时会混进中文编码的标点符号。
比如下图中的第5行中的Can't中的单引号,由于是中文编码,导致在纯英文系统中无法正常处理,虽然显示为一个字符的单引号,但是却占用了3个字节的空间,导致本来很整齐的表格显得缩进去了2格。


我想把文本中的这种中文编码的字符串删除,或者如果它实际占用了3个字节,就显示为3个小数点...。
不知道perl脚本应该怎样写呢?
我现在只是把对应的文本删除了换行和制表符,然后如果长度超过60个字符,则截短为60个字符。
$short_des=$vals{$f{'Short Description'}};
$short_des=~ s/\n//g;
$short_des=~ s/\t//g;
if ( length($short_des) > 60 ) {
$short_des=substr($short_des,0,57) . "...";
目的就是想让表格显示比较整齐一点。
但是这些讨厌的中文标点符号使得表格不整齐。
应该如何处理呢?
请多指教。
谢谢大家。

论坛徽章:
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
2 [报告]
发表于 2017-03-05 00:06 |只看该作者
回复 1# bikkuri



would like this way by s/’([^|]+)/\x27$1  /g

  1. $ grep 1-652 FILE
  2. | 5|1-6527369|Can’t Login MDN-TBG-EN2-SAR8                              |Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-06[  1]|                   |
  3. | 6|1-6528649|[WideEther][TKEvrs-45][production]  1/1/1 MC-LAG 51 has s...|Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-24[ 19]|corp-jira:ESS-6137 |

  4. $ grep 1-652 FILE | perl -pe '{s/’([^|]+)/\x27$1  /g}'
  5. | 5|1-6527369|Can't Login MDN-TBG-EN2-SAR8                                |Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-06[  1]|                   |
  6. | 6|1-6528649|[WideEther][TKEvrs-45][production]  1/1/1 MC-LAG 51 has s...|Pending    |NorP-IPD-SR&SSR-vGlobal|2017-03-24[ 19]|corp-jira:ESS-6137 |


复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2017-03-05 00:22 |只看该作者
这个问题解决方法我估计有2种方法:
1.> 穷举所有的可能,进行替换 (笨人方法,不推荐,无奈之举)
2.> 等待高手支招,在英文中混杂了中文标点符号的确非常棘手

同是小白,对这个问题根本无从入手。还请 perl 版中的大神给予帮助,指点。楼主加油。。。
Jason680 大神,版主大神 zhlong8MMMIX
麻烦几位老人家现身,给小白们科普一下吧。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2017-03-05 00:27 |只看该作者
本帖最后由 sunzhiguolu 于 2017-03-05 00:31 编辑

回复 2# jason680
大神,我借楼主宝地向您请教一个问题。
如果文本中包含但不限于中文的单引号,可能还包含其他的中文标点符号。
有什么好的处理方法吗?还请您多提供几个解决思路,谢谢。。。

比如:
除了单引号之外,希望将所有的其他的中文标点符号删除掉。

论坛徽章:
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
5 [报告]
发表于 2017-03-05 00:37 |只看该作者
回复 3# sunzhiguolu


>> ..这个问题解决方法我估计有2种方法:

是2种方法
1. 源头改--才是上策
  直接 源文档 就是对...

2. 穷举替换--虽是下策, 但要 替换 就那么几个...
  perl -pe '{ s/xxx/.../g; s/yyy/.../g; s/zzz/.../g}'

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2017-03-05 00:46 |只看该作者
回复 5# jason680
谢谢大神指点。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
7 [报告]
发表于 2017-03-05 15:03 |只看该作者
回复 7# bikkuri


看来用perl -pe '{s/[\x7f-\xff]/./g}'就可以了。



论坛徽章:
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
8 [报告]
发表于 2017-03-05 15:50 |只看该作者
回复 8# bikkuri

两个都用 更好...
perl -pe '{s/([^|]+)/\x27$1  /g; s/[\x7f-\xff]/./g}'


个别(已知)先替换, 余下用点(.)替换
perl -pe '{s/xxx/.../g; s/yyy/.../g; ...; s/[\x7f-\xff]/./g}'

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
9 [报告]
发表于 2017-03-05 16:16 |只看该作者
非常感谢您的指点。
每次都从您这里学会好多东西。
谢谢了。

回复 9# jason680



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP