发信人: FenRagwort (泽), 信区: Perl
标  题: Perl实用中文处理步骤(修改版)
发信站: 水木社区 (Mon Feb 14 12:52:14 2011), 转信

(修改版 感谢Invader)

0、你至少得知道编码是怎么回事,utf-8、gbk是什么意思
  你的文本编辑器能显示一个文件是什么编码,
      不然你要处理中文文件,都不知道用什么编码打开
  不过一般就是gbk和utf8两种,实在不行两个都试一遍
  注意也许你看到的不是gbk,而是gb2312,
      这两个使用上实际是一样的,gbk完全包含gb2312

1、让你的脚本文件本身用utf8保存,最好养成写任何脚本都用utf8的习惯

2、脚本开头加上:
  use utf8;
  use open ":encoding(gbk)", ":std";
  意思是脚本里的字符串都用utf8处理,但是标准输入输出用gbk(默认的代码页编码)
  做到这一步,脚本里就可以直接用中文了,字符串、正则表达式都没问题

如果要打开的文件全部是一种编码,如utf8,则可以加上:
  use open ":encoding(utf8)"; #如果文件全是gbk,那么承上编码设置,此行可省略

3.1、打开内有中文的文件前,先要确定它的编码,
       最常见是gbk或utf8,台湾来的可能是big5,utf16le的偶有可能,其他较少见
  这样打开:
  open my $fh, "<:encoding(gbk)", "file.txt" or die; # 读文件
  open my $fh, ">:encoding(utf8)", "file.txt" or die; # 写文件
  # 如果上面设置了默认打开编码为utf8,则具体打开文件时可省掉":encoding(utf8)"
  # 打开别的编码的文件,还需显式指定编码

如果Win32系统下打开utf16le或be文件,需要写成:
  open my $fh, "<:raw:encoding(utf16le):crlf", "file.txt" or die;
      否则会有crlf转换的bug

3.2、也可以先打开文件,立刻再用binmode绑定编码
  open my $fh, "file.txt" or die;
  binmode($fh, ":encoding(gbk)");
  一般情况,直接在open里指定encoding即可,有时需要先接收数据,再binmode

4、如果你的文件名是中文,有点麻烦,得这样:
  use Encode qw/encode/;
  my $file = "2011年工作记录.txt"; # 中英文数字混合文件名也没问题
  $file = encode("gbk", $file); # 文件名是通过标准输出传给命令行的,而命令行
                                # 的编码是gbk,所以要编码成gbk,保持一致
  open my $fh, "<:encoding(gbk)", $file or die;

OK,中文问题搞定了,然后该干嘛干嘛,除了一些以字节为对象的操作(如seek、pack),
你就把“甲乙丙丁”当“ABCD”用吧,冇问题

X、附送小技巧:
  如果你是批量处理文本文件,那甚至可以不管中文文件名问题
  比如要处理ch_files文件夹下的所有txt文件(包含中文文件名),那么
  my @files = glob "ch_files/*.txt";
    # 不过假如你的文件夹是带中文的,那还是得把文件夹参照4转码
  foreach my $file (@files) { # $file若print出来可能有乱码,但是无妨
      open my $fh, "<:encoding(gbk)", $file or die;
      # 假定所有文件都是gbk编码,如果你甲文件是gbk,乙是utf8,
      # 那就有点麻烦,这里简化下问题
      while (<$fh>) {
          print;
      }
  }

【 在 gimp (浪子已回头) 的大作中提到: 】
: 个人写的一些perl学习总结(比较粗浅)
: 我的工作是做搜索引擎方面的,
: 经常需要对索引数据做一定的预处理和后处理
: ...................

Perl实用中文处理步骤(修改版)的更多相关文章

  1. Endnote 中文参考文献样式修改版

    http://blog.yuelong.info/post/endnote-gbt7714-2005.html 很多人不知道 EndNote 是自带中文参考文献引用样式的,即符合<文后参考文献著 ...

  2. 转载:Eclipse+Spket插件+ExtJs4修改版提供代码提示功能[图]

    转载:Eclipse+Spket插件+ExtJs4修改版提供代码提示功能[图] ExtJs是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架.功能丰富,无人能出其右.无论是界面 ...

  3. 若快打码平台python开发文档修改版

    一.打码的作用 在进行爬虫过程中,部分网站的登录验证码是比较简单的,例如四个英文数字随机组合而成的验证码,有的是全数字随机组成的验证码,有的是全中文随机组成的验证码.为了爬虫进行自动化,需要解决自动登 ...

  4. Medoo个人修改版

    Medoo是一款轻量级的php数据库操作类,下面不会介绍Medoo的使用方法,想学习Medoo请前往官网自学:http://medoo.in/ 在接触Medoo之前,一直是用自己写的php数据库操作类 ...

  5. Android 仿美团网,大众点评购买框悬浮效果之修改版

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...

  6. 黄聪:WordPress图片插件:Auto Highslide修改版(转)

    一直以来很多人都很喜欢我博客使用的图片插件,因为我用的跟原版是有些不同的,效果比原版的要好,他有白色遮罩层,可以直观的知道上下翻图片和幻灯片放映模式.很多人使用原版之后发现我用的更加帅一些,于是很多人 ...

  7. sqm(sqlmapGUI) pcat修改版

    sqlmap是一款开源的注入工具,支持几乎所有的数据库,支持get/post/cookie注入,支持错误回显注入/盲注,还有其他多种注入方法. 支持代理,指纹识别技术判断数据库 .而sqm(sqlma ...

  8. 安装阿里云github提供的修改版minikube

    由于kubenetes域名背墙(gcr.io),如kubernetes-dashboard服务依赖不能正常使用. $ docker pull gcr.io/google_containers/paus ...

  9. Indy 10.5.8 for Delphi and Lazarus 修改版(2011)

    Indy 10.5.8 for Delphi and Lazarus 修改版(2011)    Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的I ...

随机推荐

  1. nginx 服务器配置文件指令

    localtion 配置        语法结构: location [ =  ~  ~* ^~ ] uri{ ... }        uri 变量是带匹配的请求字符, 可以是不含正则表达的字符串, ...

  2. python 爬虫系列06--古诗文

    读书破万卷,下笔如有神 import requests import re def parse_page(url): headers = { 'USer-Agent':'user-agent: Moz ...

  3. 【3dsMax安装失败,如何卸载、安装3dMax 2011?】

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  4. 牛客网Java刷题知识点之OSI七层参考模型 和 TCP/IP五层参考模型

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  5. isqlplus的使用

    1 再安装Oracle的机器上开启服务[命令services.msc] 2 浏览器输入下面的网址: 虚拟机[安装orcale的机器]:http://localhost:5560/isqlplus/ 本 ...

  6. 进入保护模式(一)——《x86汇编语言:从实模式到保护模式》读书笔记12

    之前已经做了一些理论上的铺垫,这次我们就可以看代码了. 一.代码清单 ;代码清单11-1 ;文件名:c11_mbr.asm ;文件说明:硬盘主引导扇区代码 ;创建日期:2011-5-16 19:54 ...

  7. JQuery选择器——《锋利的JQuery》

    刚学CSS的时候我们已经接触了选择器,其实就是按照一定的规则选择出来我们想要获取到的元素.在这里,既然选择了用jQuery选择器,首先来谈谈JQuery选择器的优势: 1.简洁的写法:$()函数在很多 ...

  8. JavaScript对象 创建对象(二)

    组合使用构造函数和原型模式创建对象 function Person(name, age, job){ this.name = name; this.age = age; this.job = job; ...

  9. JavaScript对象 创建对象(一)

    创建对象  --以下内容来自JavaScript高级程序设计 工厂模式 用函数来封装以特定接口创建对象的细节. function createPerson(name, age, job){ var o ...

  10. info.plist 安全登录

    设置info.plist 安全登录 App Transport Security Settings  dictionary Allow Arbitrary Loads  Boolean  YES