nDiki : UTF8 フラグ
UTF8 フラグ - "UTF8" flag (UTF-8 flag)
Perl において文字列が UTF-8 文字列かどうかを示すフラグ。
UTF8 フラグが立っているかどうかの確認
- Encode::is_utf8(STRING, [, CHECK])
- utf8::is_utf8(STRING)
- Devel::Peek::Dump の FLAGS 情報
等を使用する。
UTF8 フラグを立てる/落とす
| 立てる | 落とす |
| utf8::decode(STRING) | utf8::encode(STRING) |
スポンサード リンク
Related term
2004年2月3日 (火)
■ [WiKicker] WiKicker の文字化け対応

WiKicker の文字化けであるが Perl v5.6.x という環境が怪しそう。 ということで、ローカルに Perl v5.6.2 を入れてテスト。
tar zxvf perl-5.6.2.tar.gz cd perl-5.6.2 rm -f config.sh Policy.sh sh Configure -de -Dprefix=/usr/local/perl-5.6.2 make make test make install
で /usr/local/perl-5.6.2/bin/perl -MCPAN -e shell でもりもり必要なモジュールをインストール。
で WiKicker のテスト。化けた。 追いかけてみると、Locale::Maketext モジュールが use utf-8 をしているため、l10n した文字列は UTF-8 として mark されてしまっているようだ*1。 で、mark されていない他の部分の(バイト列としてのUTF-8)文字列と結合したりしたところで化けたと。
ということで、Perl v5.6.x では maketext で帰ってきた文字列の UTF-8 mark を外すようにする。
if (5.006 <= $] && $] < 5.7) {
return eval "no utf8; my \$tmp = \$language_handle->maketext(\@param); \$tmp =~ /^(.*)\$/; \$1";
}
という緊急処置コード。 Perl 5.0005_03 では utf8 プラグマ自体が無いので、eval の中に入れておく。 v5.6.x での UTF-8 mark の外し方が良くわからないので、とりあえず正規表現に全マッチさせるというダサいコード(v5.8 だと utf8::* にそこら辺の関数があるのだが)。
*1Perl 5.6.x では Perl v5.8.x のように "UTF8" flag という呼び名はないのかな?
- YAML Perl モジュール (2004-05-19)
- 野良パッケージと依存 Perl モジュールのインストールセット をCPAN... (2006-02-11)
- 野良パッケージと依存 Perl モジュールのインストールセット を CPA... (2006-02-12)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- DBD::Oracle 1.16 を Debian GNU/Linux s... (2005-05-19)
2004年5月19日 (水)
■ YAML Perl モジュール

データファイルをYAMLで扱おうと思い、YAML Perl モジュール (0.35)でちょこちょこと実験。
@ 日本語がことごとく quote される。
ある UTF-8 で書かれたファイルを読み込んで YAMLで Dump したら、日本語の部分がことごとく quote される。 これはいただけない。
my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
で判別している。手抜きではないか。 さてどうしたものか。
と考えていたら、よく考えたら Perl v5.8.x だとバイト単位ではなく文字単位で正規表現マッチングさせられるんだったことを思い出した。 手抜きだなんて思って失礼しました。
データファイルを読んで utf8::decode してから YAML で Dump するようにしたらクオートされなくなった。Good.
Perl v5.6 系だとどうすればいいんだろ。 YAML.pm を直接書き換えて
use utf8;
を追加すれば期待通りにはなるのだが、ちょっと嫌だな。
@ sequence をインラインで
短い sequence は
- a - b - c
ではなく
[a, b, c]
の形式で出して欲しい。YAML.pm のチェックしたところ
my $y = YAML->new; $y->InlineSeries(5); print $y->dump($data);
のようにインラインにしてよい上限の個数を指定すればよいことを知る。
[ UTF8 フラグ ]
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- YAML Perl モジュール と Perl v5.6 (2004-05-20)
- Template Toolkit で UTF-8 なファイルを INCLU... (2004-10-29)
- Skype for Linux 1.0.0.1 (2005-02-02)
2004年10月29日 (金)
■ Template Toolkit で UTF-8 なファイルを INCLUDE すると文字化け

"UTF8" flag に起因する既知の問題のようだ。
Perl v5.8.4 において Template Toolkit 2.14 だと化けるが、2.13 以前 (2.13 と 2.10 で確認)だと大丈夫。
Template::Providerを継承して UTF8 フラグまわりの処理をする自前の Provider を作ってそれを使うという手もあるようだが、今回は 2.13 を使う事で対処。
- Template Toolkit 2.14 の UNICODE パラメータ (2004-11-03)
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- Template Toolkit + PAR (2004-09-13)
- YAML Perl モジュール (2004-05-19)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
2004年11月3日 (水)
■ Template Toolkit 2.14 の UNICODE パラメータ

Template Toolkit で UTF-8 なファイルを INCLUDE すると文字化けする問題だが、ソースを読んでみると Template::Provider に UNICODE という undocumented な初期化パラメータを発見。
Template (か Template::Provider) を new するときに UNICODE => 0 すれば化けなくなった。 "UTF8" flag を立てないで文字列を扱っているスクリプトはこれでOKか?
- Template Toolkit で UTF-8 なファイルを INCLU... (2004-10-29)
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- Template Toolkit + PAR (2004-09-13)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- YAML Perl モジュール (2004-05-19)
2005年9月13日 (火)
■ [ WiKicker ] hell mode - HTMLタグ付けブロックの導入

WiKicker では、直接 WikiPage にHTMLタグを記述して表示に反映させる機能を提供していない。
@ HTMLタグ付けを許すのは嫌だ
HTMLタグ付けを許すと
が起きやすくなるし、ページのソースの単純さが大きく失われてしまう。 レンダリングしてHTMLにした時に、正しいHTMLを出力されることを保証することが困難になるとともに、HTML以外へのレンダリング/コンバートもかなり難しくなる。
この機能を導入すると、Wiki の良さの半分(あるいはもうちょっと沢山か、もうちょっと少なめ)が失われてしまう。
@ でも
とはいえ欲しいという声があることも事実。 オープンな WikiForum では全くお勧めできないが、閉じたユーザグループの中ではまぁ必要悪なのかもしれぬ。
また正直ちょっとした表現を追加したい時に、WiKicker 用のプラグインを書くのも面倒だというのは確かにある。
WiKicker では開始・終了マーカによる複数行にまたがるブロックを表すための文法は(閉じ忘れを避けるため)意図的に排除してある。 このため、複数行にわけて書きたいような長いデータを扱うような拡張も導入しにくい。
ちょっと手抜きして「生HTML書けちゃえば」という誘惑はなくはない。
@ 大人の事情
ということでまあ自分に言い訳をしつつ、標準ではオフというかたちで HTMLタグ付けブロックを導入することにした。 スイッチは hell mode とかにしたい (今回は syntax.html というプロパティ名にしたけれど)。
記法は単純に、
normal wiki syntax text... <html> html tagged text... ... </html> normal wiki syntax text...
のように行頭が <html> である行から、行頭が </html>である行までをHTMLタグ付けブロックとすることに。 このため、<html>ではじまる段落が書けなくなるという小さな非互換が発生するが、いたしかたない。
@ サニタイズ
HTMLタグを直接使えるようにするとはいえ、全てを許してしまうのはあまりに危険で非人道的すぎる。 有効なHTMLタグや属性は限定的であるべきだ。
このあたりの処理は面倒だが、幸いにしてCPANにモジュールがある。 今回は HTML::Scrubber を使うことにした。 HTML::Parserを使って parse し、指定したルールに従ってサニタイズしてくれる。
ちょっと使ってみた範囲では日本語(UTF-8、UTF8 フラグなし)でも問題ないようだし、文法的に正しくなくてもきちんとサニタイズできているようだ。
ということで、これを採用することに。
どの要素・属性を許すかはまだきちんと決めかねる。 当面は様子をみながら、調整していく予定。 サニタイザは設置者が置き換えられるようにプラガブルにしておかねばならないな。
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- [ WiKicker ] form/list の paragraph から... (2003-05-03)
- Wikiの文法の標準化 (2004-02-10)
- 無制限 HTML タグ付けブロックを使って nDiki に Google ... (2007-08-23)
スポンサード リンク
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 15.168967s / load averages: 0.11, 0.13, 0.14
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク