トップ «前の日記(■2004-01-17) 最新 次の日記(■2004-01-19)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|07|10|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2004-01-18 コードの判定

* [Perl] Encodeの判定方法B!

  さらにJEncodeのコード判定を直しました。ところでJcodeとEncode(Encode::Guess)の判定精度の違いですが、Jcode.pmではeuc,sjis,utf8それぞれで一番多くマッチしたものが判定結果になります。これに対してEncode::Guessでは指定した文字コードでdecodeできないものを篩にかけていきます。そのため、複数のコードでdecodeできてしまうと'shiftjis or euc-jp'や'euc-jp or utf8'などになってしまうわけです。今回はsjisかeucかわからない場合だけ、その文字列をeucと仮定してdecodeし、日本語にマッチするかチェックするようにしました。これで相当判定精度が高まっています。が、いわゆる半角カナなどの文字に対しては、失敗する場合がありますので、要修正です。

 →最新版ではだいぶ補助判定方法が変更されています(2004-04-12)

* [Perl] Perlの正規表現B!

  ちなみにperl5.8以降(一応5.6も)では

$str = decode("euc-jp", $original);  # utf8化
$str =~ m/(?:
  \p{InHiragana}                   | # 平仮名
  \p{InKatakana}                   | # カタカナ
  \p{InCJKUnifiedIdeographs}       | # 漢字
  \p{InCJKSymbolsAndPunctuation}   | # 全角記号
  \p{InHalfwidthAndFullwidthForms} | # 半角カナ等
)/x;

とできます(参考:perl5.8のUnicodeサポート)。JEncodeはこれを使って補助判定しています。

 追記:こういうのもあります(2004-04-12)

 \p{InArrows}             # 矢印
 \p{InGeneralPunctuation} # 一般句読点
 \p{InBoxDrawing}         # 罫線

  っていうか、こんな感じになりました。(2004-04-16)

本日のTrackBacks(全2件) []
_ weblog.hikoboshi.mac:Encode.pmとJcode.pm (■2004-06-26 15:24)

ところでJcodeとEncode(Encode::Guess)の判定精度の違い

_ blog.nomadscafe.jp:Jcodeのエンコーディング判定 (■2004-09-01 16:58)

Jcode.pmには毎度お世話になりっぱなしだが、今日は EUC-JPの文字列「GOOGLEニュース」(googleは全角大文字)がUTF8だと認識されるということに気づいた。 perl5.6での話なので5.8ではどうなるかわからない。 #!/usr/bin/perl use strict; use Jcode; print getcode("..