This presentation explores common mistakes made by programmers when dealing with Unicode support and character encodings on the Web. For each mistake, I…
「プログラマのための文字コード技術入門」を読んで自分なりに理解した点をザックリとまとめてみる。 それほど正確性を求めて書いているわけではないので、間違ってる可能性大です。 間違いなどあればコメントなど頂けるとありがたいです。 それぞれの文字コードはどう違うのか? 日本語の文字コードは大きく以下の2つに分けられる JIS X 0208 文字集合をベースにしたもの Unicode文字集合をベースにしたもの JIS X 0208 文字集合をベースにした文字コードには、EUC-JP, Shift_JIS, ISO-2022-JP がある。 Unicode文字集合をベースにした文字コードには、UTF-8, UTF-16 などがある。 上で挙げた「文字コード」とは正確には「エンコーディング(文字符号化方式)」の事を指す。 文字符号化方式 文字集合って? 読んでそのまんま”文字の種類の集まり”。「キャラ
付箋紙Greasemonkeyで、GM_setValueに登録した日本語の文字化け対策にencodeURIをつかったけど、encodeURIはURIをエンコードするための関数なのであんまり褒められた使い方ではないですね。しかも、encodeURIのようなURLエンコーディングは文字列をUTF-8にしてから、エンコード対象の各バイトを%xx形式*1で表現するので、日本語1文字をあらわすのにたいていの場合ASCII9文字が必要になって効率が悪いです。*2 なので、前述のような単に非ASCII文字をエスケープしたいだけのようなケースではUnicodeエスケープを使った方がよいです。Javaのpropertiesとかnative2asciiとかのやつです。 Unicodeエスケープは\uxxxx*3の形式であらわすので、たいていの日本語1文字はASCII6文字になって、URLエンコーディングに比べ
id:tomi-ru さんが [http://e8y.net/mag/015-encode/:title] というとてもプラクティカルな [http://search.cpan.org/perldoc?Encode:title=Encode] 入門をお書きになったので,わたしも違う切り口で書いてみたくなりました。 いちおうの基礎(読み飛ばし可) 文字セット, キャラクタセット, 文字集合, 文字集合 - Wikipedia エンコーディング, 符号化方式, 文字符号化方式 - Wikipedia この2つは異なります。とくに知らなくても下記の文書を読むことはできますが,理解しているとためになります。くわしく知りたい人は自習してください。 文字セットの例 Unicode JIS X 0208 ひらがなとかカタカナとか漢字とか ASCII 文字 エンコーディングの例 UTF-8 ISO-202
Unicode の16進数の実体参照を正規表現などで元に戻す 2008-05-10-3 [Programming] 普段は適切に処理をされてて問題にならないんだけど、 ときどきひょんな局面で出会ってしまうのが、 "�" という形式の文字列、16進数の実体参照です。 Perl でデコードする方法をメモ。 pack と Encode::decode を使うと良いみたい。 #!/usr/bin/perl use strict; use warnings; use Encode; use utf8; binmode STDOUT, ":utf8"; my $a = "情報時代"; $a =~ s/&#x([0-9A-F]{4});/decode('UCS2', pack('H*', $1))/ge; print "$a\n";
2008年05月11日21:00 カテゴリLightweight LanguagesTips perl - 文字参照を(en|de)codeする すでに正解が書かれていますが、 [を] Unicode の16進数の実体参照を正規表現などで元に戻す pack と Encode::decode を使うと良いみたい。 はてなブックマーク - miyagawaのブックマーク / 2008年05月11日 それ HTML::Entities::decode / regexp でも chr(hex($1)) のほうがわかりやすくないかな 繰り返しておくだけの価値はあるので。 HTML::Entitiesを使う まず、HTML::Entitiesのdecode_entities()を使うという方法があります。これがベストプラクティスかな。 #!/usr/local/bin/perl use strict;
2008年05月08日04:00 カテゴリLightweight Languages perl - Encode 中級 以前書いた 404 Blog Not Found:perl - Encode 入門 は大好評でしたが、 ウェブで利用される文字コード、UnicodeがASCIIを上回る--グーグルが明らかに:マーケティング - CNET Japan UnicodeがASCIIを追い越し、World Wide Web上で最も多く利用されている文字コード体系になったとGoogleのシニアインターナショナルソフトウェアアーキテクトMark Davis氏がブログで述べている。 という時代に完全対応するには、入門以上の知識がちょっと必要になります。 例えば、本blogをホストしてくれているlivedoor blogの文字コードはEUC-JP。「時代はUnicode」だと言っても、こうした事情もまだ
2008年05月02日04:00 カテゴリLightweight Languages Unicode - 似た文字同士にご用心 後者はハイフンでなくてマイナス記号でんがな。 [を] UTF-8 の全角ハイフンが Perl の正規表現にマッチしなくて悩んだ で、元のテキストファイルの全角ハイフンを「od -t x1」 で見てみると「ef bc 8d」と「e2 88 92」の2種類が混じっていました。 前者は「\p{Hyphen}」にマッチするのですが後者はダメ。 まあ原因は分かったので、前処理でバイナリ置換して解決しました。 で、紛らわしそうなのを名前のHYPHENとMINUS SIGNでgrepするとこんな感じになる。 egrep '(HYPHEN|MINUS SIGN)' /usr/local/lib/perl5/5.10.0/unicore/Name.pl -002DHYPHEN-MI
2008年02月18日10:00 カテゴリLightweight Languages perl - utf8::is_utf8("\x{ff}") == 0 ちょうどいい機会なので、Perl 5.8以降におけるutf8フラグの立ち方を。 unknownplace.org - 2008/02/17 - utf8::is_utf8 ということで、"\x{6751}\x{702c}\x{5927}\x{8f14}" などというData::Dumper表記でかならずしも utf-8フラグがたつわけじゃない。ということがいいたかったんだと思うのだけれど、 \x{UUUUUU}とutf8 flag まずはクイズです。以下がどう出力されるかを答えなさい。 sub pfrag{ print utf8::is_utf8($_[0]) ? 1 : 0, "\n" } pfrag "Hell\xC3, worl
Python の unicodedata モジュール - bkブログ を読んで,それ Perl だとどうよと思ったんで対応をまとめてみました。utf8 flag や Encode モジュールについては特に解説しませんので。 文字の名前を取得する charnames モジュール(Perl 5.6 より付属)の viacode 関数を使うと文字の名前を取得することができます。引数として文字列ではなく文字コードを渡すところが要注意です。 use utf8; use charnames qw( :full ); print charnames::viacode(ord 'A')), "\n"; # 'LATIN CAPITAL LETTER A' print charnames::viacode(ord 'あ')), "\n"; # 'HIRAGANA LETTER A' 文字列リテラルとして標準
2007年03月10日17:30 カテゴリLightweight Languages javascript - encodeURIUnicode()と%uXXXX問題 これを見て、(de|en)codeURIUnicodeがあればいいと思ったので作ってみた sawatの日記 - Unicodeエスケープ なので、前述のような単に非ASCII文字をエスケープしたいだけのようなケースではUnicodeエスケープを使った方がよいです。Javaのpropertiesとかnative2asciiとかのやつです。 Decoded: Dan 弾 𪚲 Encoded: Dan%20%u5F3E%20%uD869%uDEB2 要は、U+00ffまではencodeURIComponent互換、それ以上はescape()互換というもの。こうしてencodeされたものは、CGI.pmとかでもほぼそのまま使える。
「それ Unicode で」などで紹介されている、Unicode の U+202E (RIGHT-TO-LEFT OVERRIDE; RLO)を使って拡張子を偽装された exe ファイルの実行を抑止する方法を思いついた。 メモ帳を開いて、"**"と入力する(前後の引用符は不要)。 "*"と"*"の間にキャレット(カーソル)を移動させる 右クリックで「Unicode 制御文字の挿入」から「RLO Start to right-to-left override」「RLO Start of right-to-left override」を選択 Ctrl-A で全て選択、Ctrl-C でクリップボードにコピー。 ローカルセキュリティポリシーを開く 画面左側の「追加の規則」を右クリック 「新しいパスの規則」を選択 「パス」欄で Ctrl-V をして、メモ帳の内容を貼り付ける。 セキュリティレベルが「
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く