• ベストアンサー

文字コードについて \x{53d6}表記法?

Perl5.8を使っています。 下のプログラムを実行すると、「取得」と表示されますが、この逆で"取得"文字列から、 \x{53d6}\x{5f97}を求めたいです。 また、\x{53d6}は バイトオーダー無しのUTF8の数値という意味でしょうか? use utf8; use encoding "shiftjis"; print "\x{53d6}\x{5f97}"; # 取得と表示されますが、この逆で"取得"文字列から、 \x{53d6}\x{5f97}を求めたい。 # \x{53d6}は バイトオーダー無しのUTF8の数値という意味でしょうか?

  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

こんな感じ --------------------------------------------------------------- use encoding "shiftjis"; use Encode; print "\x{53d6}\x{5f97}\n"; $text="取得"; print "$text\n"; $data=Encode::encode("UTF-16LE",$text); for $x (unpack("S*",$data)){ printf("\\x{%04x}",$x); } ---------------------------------------------------------------- ># \x{53d6}は バイトオーダー無しのUTF8の数値という意味でしょうか? UTF8ではなくてUnicode(コード)

関連するQ&A

  • 【文字コード】外見上は全く同じなのに生の文字コードが異なるのはなぜ?

    文字コードで行き詰まりました。 同じUTF8で全く同じ文字列であるにも関わらず(外見上は全く同じにも関わらず)、2つの生の文字コードが異なるということが起きて、どうしたらいいのかわかりません。 WEBサイトから「あいう」という文字を取り出してきて、そいつの文字コードを、生で表示させました。 すると、 E38182E38184E38186 になります。ところが、perl文の中で$testStr="あいう"; として、そいつを同じように16進数で表示させると、 304230443046 と、違うものになっています。 にも関わらず、「WEBからとってきた文字列」も「perl内で書いた文字列」も両方「Jcode::getcode()」でその文字コードを調べると、utf8になります。 しかも、それら両方とも、print()をすると、同じように「あいう」と表示されます。 「perl内で書いた文字列」の方では、問題なくDBに入れれるのですが、「WEBからとってきた文字列」の方は、文字化けします。 「WEBからとってきた文字列」を「perl内で書いた文字列」のような文字コードに変換するにはどうすればよいのでしょうか? なぜ同じUTF8として認識されているのでしょうか? もう気が狂いそうです。 どなたかお助けください。お願いします。 環境 Ubuntu perl v5.8.8 built for x86_64-linux-gnu-thread-multi 以下は詳しいソースです。 use utf8;#この質問に関係がありそうなモジュールです use Jcode; use DBI; use URI; use YAML; use Switch; use Web::Scraper; use HTTP::Request::Common; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Request::Common qw(POST); ##Webサイトから文字列「あいう」を取得してくる。取得過程は略してます。 $testStrFromWeb=@titleArr[$i];#ちなみにWebサイトの文字コードはUTF8です。 print("testStrFromWeb:".$testStrFromWeb);#「あいう」と表示されます。 ##Webサイトから得た文字列「あいう」の生の文字コードを表示。 $strCode=$testStrFromWeb; $strCode =~ s/(.)/sprintf "%X", ord($1)/eg; print "$strCode\n";#E38182E38184E38186と表示されます ##Webサイトから文字列「あいう」の文字コードの種類を表示(utf8が返ってくる) my $getcode = Jcode::getcode(\$testStrFromWeb); print $getcode ,"\n";#utf8と表示される ##perl内で書いた文字列。 $testStrInPerl="あいう"; print("testStrInPerl:".$testStrInPerl);#「あいう」と表示されます。 ##perl内で書いた文字列「あいう」の生の文字コードを表示。 $strCode=$testStrInPerl; $strCode =~ s/(.)/sprintf "%X", ord($1)/eg; print "$strCode\n";#304230443046と表示されます ##perl内で書いた文字列「あいう」の文字コードの種類を表示 my $getcode = Jcode::getcode(\$testStrInPerl); print $getcode ,"\n";#utf8と表示される ここまで読んでくださってありがとうございます。

    • ベストアンサー
    • Perl
  • 文字の数え方

     use utf8; を宣言すると、内部に記述されるリテラルにutf8フラグが立てられて、例えばlengthを用いて文字数を数えた場合に、多バイト文字であっても1文字を1とカウントしてくれるそうです。 次のコードでは、文字列の文字数を数えてみました。。   #! /usr/bin/perl   use utf8;   use Encode;   my $str="最初にUTF-8で表示します。次にshift-JISで表示します。";   print length $str;   print "\n";   $str=encode("shiftjis",$str);   print length $str;   print "\n"; 実行結果は以下の通りです。   33   52 文字列がUTF-8の場合は、シングルバイト文字、多バイト文字関係なく1文字で計算するので33文字です。これに対してshift-JISの場合は、多バイト文字を2文字でカウントするので52文字になります。 なるほど。 しかし、次がよく分からないんですけど、   use utf8; をコメントではずすと、その実行結果は以下のようになりました。   71   76 これはどういう計算なのでしょうか?

    • ベストアンサー
    • Perl
  • 文字コードの変換

    取得して保存したテキストファイルの文字コードを変換する方法が知りたいです。 ファイルはUTF-8で保存されていて、shiftjisに直して保存するにはどうしたらよいでしょうか?

  • Perlの文字コード変換についての質問です。

    Perlの文字コード変換についての質問です。 ホームページ全体は、UTF-8で作成されています。 そのため、$qsは、どうも、S-JISのようなので、UTF-8に変換して URLデコードさせたいのですがうまくいきません。 文字化けしないで、UTF-8で作成されたページに表示させたいのですがどうすればよいでしょうか? 宜しくお願い致します。 ------------------------------------ $qs = $ENV{'QUERY_STRING'}; use Encode::Guess qw/ shiftjis /; use Encode qw/ decode /; $enc = guess_encoding ( $qs ); if ( ref $enc ) { $utf8 = decode ( $enc->name , $qs ); } $qs =~ tr/+/ /; $qs =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print "$qs";

    • ベストアンサー
    • Perl
  • utf8使用時のフォーム入力文字コード

    use utf8; binmode(STDIN,":encoding(shiftjis)"); をすると、入力時に内部変換がかかり、UTF-8として扱える という認識で使っていたのですが、下記のコードを実行してみると 入力した文字は普通に sjisで表示されます。 binmode(STDIN~ はどのような意味を持つのでしょうか。 http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html http://www.hikoboshi.org/perl/doc/encode.html 他、いろいろなサイトで調べてみたのですが、いまひとつ 納得する回答を得ることができません。 //////////////////////////////////////////////////// use utf8; use open 'encoding(utf8)'; binmode(STDIN,":encoding(shiftjis)"); use CGI; print "content-type:text/html; charset=Shift_JIS \n\n"; print <<"EOM"; <form action="xxx.cgi"> <input type="text" name="hoe"> <input type="submit"> </form> ここは UTF-8文字列なので化ける<br> EOM $cgi = CGI->new; print $cgi->param('hoe'); //////////////////////////////////////////////////// 現在は下記のコードで自前で UTF-8に変換しています //////////////////////////////////////////////////// foreach( $cgi->param() ){ my $str = $cgi->param($_); $str = Encode::encode('utf-8', Encode::decode('shiftjis', $str)); $cgi->param( -name=>$_, -value=>$str ); }

    • ベストアンサー
    • Perl
  • UTF-7のバイト長は、元のShiftJis文字列の最大何倍になりますか?

    ShiftJIS文字列をUTF-7に変換した場合、 バイト数は、最大で元の何倍になりますか?

  • WWW::Mechanizeの文字コードについて質問

    WWW::Mechanizeの文字コードについて質問 以下のようなソースコードを書いて実行してみたのですが どのサイトを取得しても、すべて文字コードがUTF8だと認識されます。 ------------------------------------------------------- #!/usr/bin/perl #WWW:MechanizeでHTMLの取得 use WWW::Mechanize; $w = WWW::Mechanize->new(); $w->get("URL"); $html=$w->content; #文字コードの判別 use Encode; use Encode::Guess qw/ascii utf8 euc-jp shiftjis 7bit-jis/; my $dec = Encode::Guess->guess($html); print$dec->name; ------------------------------------------------------- 例えば以下のサイトは文字コードがEUC-JPですがこれもprintされるのはUTF8となってしまいます。 http://barukanlog.blog31.fc2.com/blog-entry-541.html WWW:Mechanizeでサイトを取得し、サイトの文字コードを調べてすべてsjisにする ということがしたいのですが、すべてutf8に判断されて先へ進めないんです。 何か設定やメソッドを追加しなくてはいけないのでしょうか? わかりにくい質問かとは思いますがご回答お願いします。

  • Data::Dumper;でダンプ後表示した文字列\x{30fc}...

    お世話になります。 下記のスクリプトを使ってrssファイル内をuse Data::Dumper;でダンプして表示してみたのですが、rssファイルがutf8で記述されているせいか 表示時に日本語の所が\x{30fc}のような文字列になってしまいます。 これをshiftjisで表示させたいのですが、試行錯誤してもうまくいきません。 どなたかご教授いただけませんでしょうか。 #!/usr/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } use XML::RSS; use Data::Dumper; my $rss = new XML::RSS; #表示形式の違いで1と2がある。 $Data::Dumper::Indent = 1; use open IN => ":utf8"; # 入力をUTF8とする use open OUT => ":shiftjis"; #use open ":std"; #use Encode; #use encoding 'shiftjis', STDIN=>'utf8', STDOUT=>'sjis'; #binmode STDOUT, ":encoding(utf-8)"; #binmode STDOUT, ":encoding(shiftjis)"; #binmode STDOUT, ":encoding(euc-jp)"; #use open ":encoding(shiftjis)"; # rssをセット。 open my $fh, '< ./test.rss'; my $text = join undef, <$fh>; close $fh; # rssをパース $rss->parse($text); # ひとまず中見を知る為にダンプしてみる print "Content-type:text/html;charset=Shift_JIS\n\n"; print "<html><head>\n"; print "<title></title></head>\n"; print "<body>\n"; print Data::Dumper->Dump([$rss]);

    • ベストアンサー
    • Perl
  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl
  • 全角空白での文字列分割について

    教えてください。 以下のような文字列で、全角空白をキーに2つに分割したいと考えています。 テストテキスト テストテストテスト スクリプトの文字コードはshiftJISで、分割対象の文字列もshiftJISです。 use encoding "shiftjis";  としてます。 ($t1,$t2) = split(/ /, $t); として試してみましたが、やはり無理でした。 何か良い方法がありましたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl