[精讚] [會員登入]
683

[PERL] 中文字字串拆解

中文字字串拆解是門學問

此文完整連結 http://n.sfs.tw/13167

複製連結 [PERL] 中文字字串拆解@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-23 16:07:10 最後編修
2019-03-14 02:40:05 By 張○○
 

自動目錄

中文字串如果要逐字拆解,直接用split會得到一堆不知名的東西..

  $ln="精讚中文字字串";
  @wds= split //, $ln;

上網找了一堆方法,直到[1]給我靈感,他的說法是這串你看起來是中文字串的中文字串,其實在PERL裡面是一個個character組成的,直接把他拆了就會變成你看不懂的一些亂碼,你得先把他用 utf8的編碼給解開。我一直認為是要組合?所以邏輯上我還是沒有搞懂。

$ln=decode('utf8',$ln);

@wds= split //, $ln;

總之這樣是正確的運作了,但是…我還是真的想知道PERL到底是怎麼處理中文字的,在[5]的文章解釋非常的清楚。

UTF8 TAG

原來是靠一個utf8的tag來作判斷:

use  Encode;
my  $str  = "中國" ;
Encode::_utf8_on( $str );
print  length ( $str ) . "\n" ; #2
Encode::_utf8_off( $str );
print  length ( $str ) . "\n" ; #6

拆解檔中文字串

use Encode;

open(FILE, 'file.txt') or die "$!";
$n=0;
while($line= <FILE>){
  Encode::_utf8_on( $line );
  @wd =split //, $line;
  print "@wd";
}
close(FILE);

這樣就能正確的拆解了。

Wide character in print 錯誤

要解決一直出現的[2] Wide character in print at,你可以這樣子做:

use utf8;
binmode(STDOUT, ':encoding(utf8)');

 

結論

指定開啟 utf8 tag 來分割和剖析字串

設定輸出為utf8來避免警告。

最好不要使用 unicode

 

參考資料

[1] https://blog.csdn.net/guo40/article/details/4037052

[2] https://blog.wu-boy.com/2009/07/perl-with-utf-8-mode/

[3] https://dotblogs.com.tw/jimmyyu/2009/08/18/10113

[4] https://www.csie.ntu.edu.tw/~p92005/Joel/Unicode.html

[5] http://heavenchou.buddhason.org/node/225

[6] https://www.key-shortcut.com/en/writing-systems/%E6%96%87%E5%AD%97-chinese-cjk/cjk-characters-1/

你可能感興趣的文章

PERL一次讀取檔案所有內容的方法($/) perl可以使用slurp mode一次讀完檔案所有內容的方法及一些範例

[PERL] Perl 不立即輸出的列印緩衝區問題 解決Perl 不立即輸出而是最後一次輸出的列印緩衝區問題

[PERL] 02-註解、變數和常數 perl的註解、變數和常數

[PERL] 14-進階比對 #1--取回比對內容 perl的正規表達式進階比對

[PERL] 中文字字串拆解 中文字字串拆解是門學問

[PERL] 09-迴圈 perl的迴圈

自行撰寫syslog server建立資訊安全控管中心#1 -- 前言及syslog介紹 利用PERL將syslog收攏到資料庫的程式

[PERL] 10- 雜湊 Perl 的hash 指標陣列

自行撰寫syslog server建立資訊安全控管中心#2 -- 架構和作法 利用PERL將syslog收攏到資料庫的程式,架構和作法

[PERL] 常態分配亂數產生函數 一般而言我們使用程式內建的 rand 函數取得的亂數是平均分配的,但如果需要常態分配的亂數產生器該怎麼做?

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很

[CodeIgniter 3] 資料庫的使用方法整理2/2 CI3 承襲 CI2,有很多的builder class可以用,依各人的使用習慣,有人喜歡一堆sql字串,有人喜歡用helper

「許功蓋」的字以及源由 有玩過電腦一段時間的人,都聽過這個人(有一天我才發現7年級的竟然都不認識這個