[Perl]UTF-8でエンコードされた文字の文字コードを表示するプログラム

Unicodeの文字コード表によるとUTF-8の半角英数、全角英数、半角カナ、全角カナの文字コードは以下のようになるようです。 英数字の場合は半角と全角の文字がそれぞれ対応していますが、カタカナの場合は半角と全角では文字の数が違うようです。

半角数字:0 - 9
30 - 39

全角数字
EFBC90 - EFBC99
2バイト目まではEFBC

半角アルファベット大文字:A - Z
41 - 5A

全角アルファベット大文字:A - Z
EFBCA1 - EFBCBA
2バイト目まではEFBC

半角アルファベット小文字:a - z
61 - 7A

全角アルファベット小文字:a - z
EFBD80 - EFBD9A
2バイト目まではEFBD

半角カナ(JISカナ)
EFBDA1 - EFBE9F
1バイト目がEFで2バイト目、3バイト目がBDA1 - BE9Fの範囲

全角カタカナ
E38299 - E383BF
1バイト目がE3で2バイト目、3バイト目が82A1 - 83BFの範囲

Unicode対応 文字コード表
http://ash.jp/code/unitbl1.htm
http://ash.jp/code/unitbl21.htm

動作確認用にまずUTF-8の文字コードを表示するプログラムを作成します。

#!/usr/bin/perl

use strict;
use warnings;
use Encode;

my $hanAlnum = "ABCDE12345abcde";
my $zenAlnum = "ABCDE12345abcde";
my $hanKana = "アイウエオ";
my $zenKana = "アイウエオ";

print_charcode($hanAlnum);
print "\n";

print_charcode($zenAlnum);
print "\n";

print_charcode($hanKana);
print "\n";

print_charcode($zenKana);
print "\n";

# UTF-8でエンコードされた文字列の文字コードを表示する
sub print_charcode {
    my ($src) = @_;

    my $srclen = length($src);
    my $pos = 0;

    while ($pos < $srclen) {
        my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
        my $bytelen = _bytesize($code);
        my $srcchar = substr($src, $pos, $bytelen);
        my $codestr = sprintf("%2.2X ", $code);
        if ($bytelen > 1) {
            my $times = $bytelen - 1;
            for my $i (1 .. $times) {
                my $charcode = ord substr($src, $pos + $i, 1);
                $codestr .= sprintf("%2.2X ", $charcode);
            }
        }

        # Windowsで表示するのでcp932(シフトJIS)に変換
        Encode::from_to($srcchar, 'utf8', 'cp932');
        print "$srcchar : $codestr\n";
        $pos += $bytelen;
    }
}

# 文字のバイト長を求める
sub _bytesize {
    my $code = shift;
    my $size = 1;
    if (0x80 & $code) { # 1バイト文字以外
        $code <<= 1;
        for my $i (2 .. 8) {
            $size++;
            $code <<= 1;
            last if (!(0x80 & $code));
        }
    }
    return $size;
}

Perl Hacks ―プロが教えるテクニック & ツール101選
オライリー・ジャパン 著者:chromatic,Damian Conway,Curtis "Ovid" Poe


amazon.co.jpのカスタマーレビューを見る
powered by amalink

[2248] Posted by kagahiro at 2012/12/17 00:25:00
オープン | 0 point | Link (1) | Trackback (0) | Comment (0)

キーワード

Perl 全角 半角 文字コード 表示 日本語 

ジャパンのホームページ


[Perl]UTF-8でエンコードされた文字の文字コードを表示するプログラム 関連リンク

Perlで全角半角変換を行う方法
日本語の文章では半角の英数字と全角の英数字、また、半角のカタカナと全角のカタカナが混在していることがよくあります。意味は半角でも全角でも同じですので、コンピュータで処理する場合はどちらかに統一してから...

[Perl]UTF-8でエンコードされた文字の文字コードを表示するプログラム トラックバック

トラックバックURL :


[Perl]UTF-8でエンコードされた文字の文字コードを表示するプログラムへのコメント


詳細の入力フィールドを表示する

おすすめ  (チェックしてコメントすると最新情報に掲載)
コメント :

< 前の投稿      次の投稿 >

アクセスランキング

今日のアクセスランキング TOP 10

  1. 2chまとめサイト - 痛いニュース(ノ∀`) (3 PV)
  2. Google News (グーグルニュース)日本版 (3 PV)
  3. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (2 PV)
  4. 8月15日は終戦記念日(しゅうせんきねんび、終戦の日) (2 PV)
  5. 時間指定で仲値トレードも簡単にできる無料EA「NAKANE3 Ver 2.02」 (2 PV)
  6. 裁量トレードで買い(BUY)か売り(SELL)かを判断する方法 (1 PV)
  7. 将棋ウォーズPCブラウザ版がchrome、Firefox、edgeなどに対応 (1 PV)
  8. Exness ソーシャルトレーディングの戦略プロバイダーになりました (1 PV)
  9. 東京地検、インサイダー取引の疑いで村上ファンドを捜査 (1 PV)
  10. Twitterで本の名言を共有~Inbook.jp (1 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (1111 PV)
  2. Google News (グーグルニュース)日本版 (240 PV)
  3. 日経平均株価(にっけいへいきんかぶか) (132 PV)
  4. 2chまとめサイト - 痛いニュース(ノ∀`) (102 PV)
  5. 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (94 PV)
  6. Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (94 PV)
  7. 仲値トレードが簡単にできる無料EA「NAKANE3 Ver 2.04」 #MT4 (90 PV)
  8. SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (87 PV)
  9. 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (73 PV)
  10. 裁量トレードで買い(BUY)か売り(SELL)かを判断する方法 (71 PV)

アクセス統計

ディレクトリ

関連サイト