「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
Encodeを使っても文字化けするとき Encodeは特定のエンコーディングにしたがって配列されたバイナリを「文字列」に置き換えるためのモジュールですが、かならずしもすべてのエンコーディングがあらゆるバイナリの組み合わせに対応しているわけではありません。 たとえば、「シフトJIS」環境における機種依存文字の例としてよく取り上げられる丸付き数字をEncodeのお作法通りにdecode、encodeする場合、「シフトJIS」だからと思って安易にshiftjis系列のエンコーディングでdecodeしてしまうと、丸付き数字のマッピングデータがないため「?@」のように文字化けを起こしてしまいます。 use strict; use warnings; use Encode; my $binary = pack('C*', 0x87, 0x40); # ①; my $string = decode(
Perlによる日本語コード変換のメモ(第二版) hikoboshi.home / Perlによる日本語コード変換のメモ(第二版) 前に書いたときと時代背景も知識も大幅に違うので、書き直してみることにしました。Perl 5.8以降を前提として考えます。 この文章で書く(つもりの)こと use utf8環境での、文字セットの考え方 発生しがちな文字化けとその原因 解決のヒント jcode.pl時代の文字セットの扱い まずは、jcode.plなどが全盛だった時代を思い出してみます。jcode.plの時代は、Unicodeはほぼ使われておらず、JIS, Shift_JIS, EUC_JPあたりの変換を行う事が主でした。実際のコードを見て、扱われ方を考察してみましょう。 #!/usr/bin/perl # jcode.plを用いたコード変換 require 'jcode.pl'; open my $
Perl 5.8ではEncode.pmが標準モジュールとなり、多バイト文字を標準で簡単に扱えるようになりました。が、jcode.plやJcode.pmを用いたコード変換の経験があると、逆にこれが仇となって文字化けの嵐に遭います。(私の場合そうだったというだけで、普通はそんなこと無いのかもしれないのですが。)漸く最近になって基本的な考え方が飲み込めるようになって来たので、この辺をまとめておこうと思います。なお、本メモは新たにPerl 5.8.x的なPerlスクリプトを書く際に気をつけることをまとめたものであり、基本的には既存のスクリプトにPerl 5.8 + Encode.pmを適用するためのものではありません。また、utf8でスクリプトを書くことを前提にしています。が、どちらにせよ、この知識は参考になると思います。(たぶん。) 本文冒頭ですが、まず参照先を示しておきます。以下のドキュメント
WindowsでPerl 5.8/5.10を使うモンじゃない 2008.01.17 3008.02.13改版 長い間に,私はPerlを使うときに次のようなテンプレートを使うようになっていた。 #!perl # utf8でセーブ # --------------------------------------------------- # @ARGV = map { decode('cp932',$_) } @ARGV ; # --------------------------------------------------- # opendir(D,encode('cp932',"表")) ; # @nodes = map { decode('cp932',$_) } readdir(D) ; # closedir(D) ; # -----
エンコードの処理の基本 Perl 5.8 以降,テキストの処理が UTF-8 (Unicode の変換形式のひとつ) を軸におこなわれるようになりました。Shift JIS や EUC-JP での処理が一般的な日本語を Perl で扱う場合,エンコードを意識したプログラミングをおこなうことが必要になります。具体的には,Perl でエンコードを意識する必要のあるのは以下の箇所です。 スクリプト自体のエンコード ファイルの入出力 標準入出力 標準エラー出力 データベース,CGIなどプロセス間のインターフェース Perl 5.8 では内部処理が UTF-8 で行われますが,特にエンコードの指定がされない場合,テキストは文字単位ではなく,バイト単位で処理されます。バイト単位で Shift JIS などのテキストを処理することもある程度可能ですが,2バイトの文字が文字として認識されていませんから,正
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く