文档章节

perl匹配中文(简体繁体others)encode

SibylY
 SibylY
发布于 2014/05/13 10:41
字数 651
阅读 1202
收藏 4


use Encode;
use strict;

my $str = "中国";
Encode::_utf8_on($str);
print length($str) . "\n";
Encode::_utf8_off($str);
print length($str) . "\n";

运行结果是:

程序代码:
2
6

这里我们使用Encode模块的_utf8_on函数和_utf8_off函数来开关字符串"中国"的utf8 flag. 可以看到, utf8 flag打开的时候, "中国"被当成utf8字符串处理, 所以其长度是2. utf8 flag关闭的时候, "中国"被当成octets(字节数组)处理, 出来的长度是6(我的编辑器用的是utf8编码, 如果你的编辑器用的是gb2312编码, 那么长度应该是4).

# gb2312 encoding  chinese
use Encode;
my $a = "china----中国";
my $b = "china----中国";
my $stra = decode("gb2312",$a);
$stra =~ s/\W+//g;
print encode("gb2312",$stra),"\n"; 
输出:
china中国

encode函数顾名思义是用来编码Perl字符串的。它将Perl字符串中的字符用指定的编码格式编码,最终转化为字节流的形式,因此和Perl处理环境之外的事物打交道经常需要它。其格式很简单:
$octets = encode(ENCODING, $string [, CHECK])

decode函数则是用来解码字节流的。它按照你给出的编码格式解释给定的字节流,将其转化为使用utf8编码的Perl字符串,一般来说从终端或者文件取得的文本数据都应该用decode转换为Perl字符串的形式。

use Encode;
use Encode::CN; #可写可不写
$dat="测试文本";
$str=decode("gb2312",$dat);
@chars=split //,$str;
foreach $char (@chars) {
    print encode("gb2312",$char),"/n";
}

1、查看可用编码

use Encode;
#Returns a list of canonical names of available encodings that have already been loaded
@list = Encode->encodings();
#get a list of all available encodings including those that have not yet been loaded
@all_encodings = Encode->encodings(":all");
#give the name of a specific module
@with_jp = Encode->encodings("Encode::JP");
@ebcdic = Encode->encodings("EBCDIC");
print "@list\n";
print "@all_encodings\n";

2、

Character :A character in the range 0 .. 2**32-1 (or more); what Perl's strings are made of.

byte :A character in the range 0..255; a special case of a Perl character.

octet :8 bits of data, with ordinal values 0..255; term for bytes passed to or from a non-Perl context, such as a disk file, standard I/O stream, database, command-line argument, environment variable, socket etc.

3、perl Encoding API:encode decode

#convert a string from Perl's internal format into ISO-8859-1
$octets = encode("iso-8859-1", $string);
#convert ISO-8859-1 data into a string in Perl's internal format
$string = decode("iso-8859-1", $octets);
4、 perl Encoding API:find_encoding

Returns the encoding object corresponding to ENCODING. Returns undef if no matching ENCODING is find. The returned object is what does the actual encoding or decoding.

my $enc = find_encoding("iso-8859-1");
while(<>) {
     my $utf8 = $enc->decode($_);
     ... # now do something with $utf8;
}
find_encoding("latin1")->name; # iso-8859-1

5、perl Encoding API:from_to

[$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK])
from_to($octets, "iso-8859-1", "cp1250");
from_to($data, "iso-8859-1", "utf8"); #equal to
$data = encode("utf8", decode("iso-8859-1", $data));





© 著作权归作者所有

SibylY
粉丝 31
博文 447
码字总数 364647
作品 0
海淀
程序员
私信 提问
中文编码集合类库--yii-chinese

目前该类库可以实现,简体中文 <=> 繁体中文编码互换,简体中文、繁体中文 => 拼音单向转换,简体中文、繁体中文 <=> UTF8 编码转换,简体中文、繁体中文 => Unicode单向转换 采用 PHP 开发。...

匿名
2010/03/02
4.1K
1
PHP下中文编码各种格式间的转换类

类源代码原作者是Hessian(solarischan@21cn.com),我合并了一下原来的Sample脚本,同时修改了一下类文件,为类构造函数增加了一个参数以便用户可以方便的在使用的时候设置配置文件路径,这样...

小麋鹿666
2017/09/03
0
0
【我的Android进阶之旅】繁体字的标点符号应该是居中还是在左下角?

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】 https://blog.csdn.net/qq446282412/article/details/86618821 一、问题描述 最近在...

欧阳鹏
01/23
0
0
语种名称代码

我们经常需要用缩写的代码来表示一种语言,比如用en表示英语,用de表示德语。ISO 639就是规定语种代码的国际标准。 最早的时候,ISO 639规定的代码是,用两个拉丁字母表示一种语言,这被称为...

阮一峰
2008/02/24
0
0
MovableType 中文化包(有点老)

从Movable Type 3.0D开始,鄙人就试图做一些Movable Type中文化的工作,至今已形成包含中文语言包、中文截断程序、中文日期等在内的一系列国际化和本地化成果,希望能够为使用Movable Type的...

小编辑
2010/06/11
487
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
57分钟前
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部