在 Windows Perl 5.8 下的簡繁轉字

上篇文章使用 Windows 系統的 API 在 Unicode 與 ANSI 字元轉換。接下來就是簡體與繁的互換了。

雖然在 Perl 中可以 use Encode::HanConvert 來轉換。但還是同樣的問題,若要打包成執行檔會包出一大包怪物。在速度效能上的考量,Sean 還是使用 Windows API 來轉換。

在 GBK 字集中包含所有簡體與繁體字,所以 Sean 的程式都先轉成 GBK 再呼叫系統的 LCMapString。

這個函不該稱「簡繁轉碼」,應該稱「簡繁轉『字』」。因為編碼並沒有改變。函式傳入的字串使用 Unicode (Perl預設UTF8),回傳值也是 Unicode 字串,僅做簡繁字互轉。

Sean 已寫成 Perl 模組,完整的程式在這裡

題外話,簡繁體字並非一對一的關係唷,因為無法100%逆轉。
例如繁體「干」「幹」「乾」簡體皆為「干」,再轉回繁體還是「干」。






use Encode qw(encode decode);
use Win32::API;

use utf8;
use strict;

use constant LOCALE_SYSTEM_DEFAULT => 0x0800;
use constant LANG_CHINESE_SIMPLIFIED => 0x0804;
use constant LANG_CHINESE_TRADITIONAL => 0x0404;
use constant LCMAP_SIMPLIFIED_CHINESE => 0x02000000;
use constant LCMAP_TRADITIONAL_CHINESE => 0x04000000;

# Perl 的 Unicode 字串正體中文轉簡體中文
sub ToCHS {
my $source = ToANSI(shift,'GBK');
my $len = length($source);
my $target = "\0" x $len;

$API_LCMapString = new Win32::API('kernel32','LCMapString','NNPNPN','N') unless defined $API_LCMapString;

my $ret = $API_LCMapString->Call(LANG_CHINESE_SIMPLIFIED,LCMAP_SIMPLIFIED_CHINESE,$source,$len,$target,$len);
return undef unless $ret;

return(ToUnicode($target,'GBK'));
}


# Perl 的 Unicode 字串簡體中文轉正體中文
sub ToCHT {
my $source = ToANSI(shift,'GBK');
my $len = length($source);
my $target = "\0" x $len;

$API_LCMapString = new Win32::API('kernel32','LCMapString','NNPNPN','N') unless defined $API_LCMapString;

my $ret = $API_LCMapString->Call(LANG_CHINESE_SIMPLIFIED,LCMAP_TRADITIONAL_CHINESE,$source,$len,$target,$len);
return undef unless $ret;

return(ToUnicode($target,'GBK'));
}



9 個回應:

Fangyaya 提到...

michael kors handbags
louis vuitton outlet
toms shoes
coach factory outlet online
beats headphones
lebron james shoes
nike air force
coach outlet online
coach outlet
kate spade handbags
michael kors handbags
polo ralph lauren
michael kors outlet clearance
true religion
basketball shoes
christian louboutin shoes
louis vuitton bags
ray ban sunglasses outlet
toms shoes
kate spade outlet
cartier watches
polo ralph lauren
jeremy scott shoes
michael kors handbags
timberland outlet
kate spade handbags
ray ban sunglasses
oakley sunglasses wholesale
jordan 6
oakley sunglasses
instyler curling iron
jordan concords
lebron james shoes 13
adidas nmd
kate spade
toms
20167.26chenjinyan

chenmeinv0 提到...

north face jackets
moncler coats
fitflop shoes
ugg outlet
ray ban outlet
canada goose sale
nike tn pas cher
michael kors outlet
oakley sunglasses outlet
pandora jewelry
2016.10.27xukaimin

chenlina 提到...

ralph lauren
oakley sunglasses canada
north face jackets
ugg boots
ray ban wayfarer
cheap basketball shoes
nike air max
cheap mlb jerseys
coach outlet
nike roshe run
chenlina20170109

Meiqing Xu 提到...

rolex replica watches
ralph lauren
coach factory outlet
gucci handbags
louis vuitton outlet
nfl jerseys
cheap uggs
sac longchamp pas cher
michael kors outlet clearance
fitflops sale clearance
20170224caiyan

نور معاذ 提到...

الاول خدماتها تغطى جميع انحاء المملكة فهى افضل شركات التنظيف بجدة ومكة والرياض وينبع والاحساء والدمام نتميز باننا نوفر افضل العماله المدربة الماهرة نقدم تنظيف منازل وخزانات وبيوت وفلل وشقق ومجالس وسجاد وموكيت
شركة تنظيف خزانات بجدة
شركة تنظيف منازل بالدمام
شركة نقل اثاث بينبع
شركة تنظيف خزانات بينبع

نور معاذ 提到...

شركة مكافحة حشرات بالدمام
تنظيف كنب بالرياض
شركة تنظيف بمكة
شركة تنظيف بالقطيف
شركة تنظيف بالاحساء

نور معاذ 提到...


شركة نقل اثاث بجدة
شركة غسيل خزانات بالرياض
افضل شركة نقل عفش بالمدينة المنورة

نور معاذ 提到...


شركة صيانة مكيفات بجدة
و افضل شركة تنظيف بالطائف
شركات تنظيف منازل بالرياض
شركة تنظيف بشرق الرياض

نور معاذ 提到...


شركات تنظيف بالرياض
افضل شركة تنظيف سجاد بالرياض
شركة تركيب باركيه بالخرج
شركة مكافحة حشرات شرق الرياض

張貼留言