• ベストアンサー

RubyでUTF8のコード値を文字に変換する方法

UTF-8の文字コードのコード値が,以下のように\(バックスラッシュ)+8進数の表記×3バイト分で,記述されています。 (例えば,\343\201\202は「あ」を表す) "\343\201\202\343\201\204\343\201\206" (これは「あいう」) このようなコードの値を文字列にしたものを,実際のutf8の文字に変換するメソッドは無いのでしょうか? 例えば, "\343\201\202\343\201\204\343\201\206".method => "あいう" のようなmethodに相当するメソッドは無いのでしょうか?

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

前回の続きですね。 http://okwave.jp/qa3630630.html 前回のお礼の欄で、問題点が見えてきましたが、 p と、print(puts)は違いますよ。 この点を勘違いしているのでは? 今回の件では、下記で「あいう」と表示されます。 (当方は、Windows環境なので sjis に変換します) require 'kconv' print "\343\201\202\343\201\204\343\201\206".tosjis p ではなく、 print か puts を使って下さい。 因みに p なら下記の様に表示されます。 "\202\240\202\242\202\244" -------------------------------------------------- 念のため、前回の件の補足をしますが、 当方の環境では、下記のソースで文字コード変換出来、 正常に日本語が表示されます。 (UTF-8で書かれたページで確認しました。) require 'net/http' require 'kconv' resp = Net::HTTP.new("サイトアドレス").get("パス") print resp.body.tosjis

ganwan2007
質問者

お礼

馬鹿な質問にご回答ありがとうございます。 pをprintにすれば解決しました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

Rubyの記法だと、"\343\201\202\343\201\204\343\201\206" はそのままで、UTF-8の「あいう」ですけど、 puts "\343\201\202\343\201\204\343\201\206" => あいう '\343\201\202\343\201\204\343\201\206'.method ・・・ケース1 を聞いていると思って良いのでしょうか?それとも、 '"\343\201\202\343\201\204\343\201\206"'.method ・・・ケース2 でしょうか? いずれにせよ、#1の方がお書きの通り、evalですがこれは関数的に使います。 ケース2だと、 puts eval('"\343\201\202\343\201\204\343\201\206"') => あいう ケース1だと、下記のように両端に " を補う必要があります。 puts eval('"'+'\343\201\202\343\201\204\343\201\206'+'"') => あいう

ganwan2007
質問者

お礼

ありがとうございます。 ずっとpを使ってました。printで解決。あー,馬鹿な質問,後悔です。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

eval があるなら, それでいいような気がする. ちょっといじらないとダメかもしれんが.

ganwan2007
質問者

お礼

ありがとうございます。 ずっとpを使ってました。printで解決しました。

関連するQ&A

  • UTF-8とASCIIコードにおける互換性について

    UTF-8とASCIIはそのASCIIコードの範囲のおいて 互換性を持ちます。(と、書籍や多種な文献にはそういった記述があります) たとえば【A】という文字をUTF-8で符号化した際は【41】(16進数で) さらにASCIIコードでも【41】という値がAという文字に割り当てられています。 確かに、一件互換しているようにみえますが、UTF-8っていうことは最終的には Unicode上のコードポイントの値・・・つまり0x0041という値に復元?(というのでしょうか)するわけですよね? でそのUnicodeの文字集合上から復元したコードポイントに対応する文字を参照しAという文字をみつけてくると・・・。 これって【A】という文字をUTF-8で符号化した歳のバイト列はASCIIと一致しているけれど 結局Unicodeコードポイントに直した場合【00】という上位バイトが無駄にくっついてきて【0x0041】となり 互換性がなくなるのではとおもったのですが・・・。 これはどういう意味の互換性なのでしょうか? 識者の方ご教授ください。 お願い致します。

  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • UTF8コードで1バイトの文字が2バイトで表現されているのですが・・・・?

    UTF8コードで1バイトの文字が2バイトで表現されているのですが・・・・? とタイトルの通りデータに    UTF-8のデータを扱っていて  16進表記で『0xC341』と  データが入ってきました。 0xC3…11000011  0x41…01000001 UTF-8の仕様で2バイト目の文字は先頭ビットが 10 から始まる仕様となっていると思いますが  2バイト目の先頭ビットが 0 の場合はUTF-8コードが  壊れていると判定してもいいんですか?    それとも、2バイトの先頭ビットが0の場合  次のバイトを1バイト文字とし変換してあげて  0x41 → A として変換するなどといった  特殊な仕様が隠れていたりするのでしょうか?    今のところ壊れていると判断しているのですが、  UTF-8ではないコードだったりする可能性もあるかな?  っと思い質問いたしました。  少し不安だったので、しっていましたら、教えてください。                          以上   検索ワード UTF-8 2バイト目 1バイト文字

  • UTF-8とUTF-16について質問です。

    まず、【あ】という文字をUTF-16というエンコーディング方式で バイト配列化すると [0] => 66 [1] => 48 というバイト値が帰ってきます。 これはとりあえずC#で処理を行いました。 Encoding encode = Encoding.GetEncoding("UTF-16"); String value = "あ"; Byte [] byteData = encode.GetBytes(value); それでは【あ】という文字の文字集合のコードポイントは右記となります。【0x3042】 これは、出力された 66、48という数値を16進数に変換すると 66=>42 48=>30 となり、リトルエンディアン環境で 0x4230という16進数であらわされるようです。 この点も不思議なのですが今回知りたいのはUTF-16でエンコーディングされた バイト配列はこのように文字集合のコードポイントに復帰?させることができますよね? ではUTF-8でエンコーディングされた【あ】という文字の バイト配列 [0] => 227 [1] => 129 [2] => 130 というバイト配列を上記のような文字集合のコードポイントの値へ復帰させることは できるのでしょうか? それに伴いUTF-8でつかわれる文字集合もUTF-16と同じコードポイントなのでしょうか? 上記 1.UTF-8でエンコーディングされた文字列をバイト配列にした場合 元の文字集合に戻せるのか?戻せるならばその戻し方は? 2.UTF-8がさす文字集合とUTF-16がさす文字集合はおなじものですよね? 上記二点よろしくご教授ください。

  • UTF-8で5~6バイトになる文字コード

    UnicodeのUTF-8で5~6バイトになる文字コードは、どのような場合でしょうか。(サロゲートペアのコードでも4バイトです。シフトJISから変換するとき、どのようなコードが5~6バイトに割り当てられるのでしょうか。) ご存知の方おられましたら、ご教示ください。

  • SJIS⇔UTF-8の文字コード変換

    SJIS⇔UTF-8の文字コード変換をするプログラムを作りたいのですが、簡単な方法があれば教えてください。 できれば、文字コードをケース文で判断して・・・のような処理ではないほうが、ありがたいです。

  • 文字コードを相互変換するには?(JIS,SJIS,EUC,UTF-8,UTF-16,Unicode)

    現在、文字コード一覧を JavaScript を使って動的にリストを作成する事を行っています。 そこで質問します。 『JavaScript』では文字コードの相互変換する方法はありますか? ある場合は関数、メソッドとその使い方を簡単でいいので教えて下さい。 もし標準では出来ない場合は、どのようにすれば相互変換できるのかその方法を教えて下さい。 ●相互変換コード シフトJISコード←→JISコード シフトJISコード←→EUCコード シフトJISコード←→UTF-8 シフトJISコード←→UTF-16 シフトJISコード←→Unicode 最終的に上記の相互変換を考えています。 変換を繰り返すことで実現できると思っています。 以上。相互変換の方法をお願いします。→JavaScript 歴1.5ヵ月です。

  • Javaの文字コード変換方法

    文字コードの変換で困っています。 例えば、標準入力で「あいう」と入力して、その文字列を UTF-8に変換して出力したいのですが、うまくいきません。 サイトにはbyteに変換してから入れると書いていましたが、 よくわかりませんでした。 宜しくお願いします。 以下、今できているソースです。 (ソースコード) import java.io.*; public class ChangeCord { public static void main( String[] args ) { try { System.out.println("何か日本語を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in, "UTF-8")); String str = br.readLine(); System.out.println("文字コードUTF-8に変換した結果"); System.out.println(str); }catch (Exception e) { System.out.println("エラー"); } } } (出力結果) 何か日本語を入力してください。 あいう 文字コードUTF-8に変換した結果 ?????? 以上です。

    • ベストアンサー
    • Java
  • Sift-JIS→UTF-8への文字コード変換

    使用マシンはWindowsXPです。 EZwebのサイトを制作中です。 XHTMLで宣言にUTF-8としているため、日本語の文字コードをSJIS→UTF-8に変換したいのですが、使い勝手のよい文字コード変換ツールを教えてください。 できればフリーがよいです。 よろしくお願いいたします。

  • 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