![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
サロゲートペアの文字コード→文字変換
Windows上でRubyを使って文字コードの書かれたファイルを読み込んで文字を出力しようとしています。
サロゲートペアの文字コードを文字に変換するにはどうしたらいいでしょうか?
たとえば上位サロゲートがa、下位サロゲートがbであるとき、JavaScriptでは次のようにすれば文字が得られるようです。
var s;
s = String.fromCharCode(a,b);
alert(s);
(参考:http://codezine.jp/article/detail/1592)
これをRubyでやろうとしていていろいろ調べてみたのですが、探し方が悪いのかわかりません。
どう書けばよいのか教えてください。
なお、WinsowsはXPです。ファイルに出力して正しく出力されているかどうかを確認しています。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Ruby1.9以降であれば、文字列リテラルでUnicodeエスケープを使うか、pack して force_encoding すればできます。
例えば U+29E3D のホッケはサロゲートペアで表すと D8 67 + DE 3D なので、
s = "\u{d867}\u{de3d}"
puts s
とすれば出力できます。
あるいは、バイトデータからですと、
a = 0b111011011010000110100111
b = 0b111011011011100010111101
s2 = [a, b].map{|i| [i.to_s(2)].pack("B*").force_encoding("utf-8") }.join
puts s2
です。
この場合はto_s(2)で2進数表現にしているのでB*でpackしてます。
この回答への補足
早速の回答ありがとうございます。
でもすみません、書き忘れていましたがRubyのバージョンは1.8.6なんです。
1.8.6の場合はどのようにすればいいのでしょうか?
ご存じでしたら教えてください。
Ruby1.9はワンクリック・インストーラーがなくて、前回インストールしようとしてよくわからなかったので躊躇していたのですが、結局Ruby1.9.1を入れたらすんなりうまく行きました。
簡潔で適切なお答え、ありがとうございました。
大変助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Visual Basic(VBA) VBAでPowerPointからExcelにレイアウト通りに出力する 4 2023/07/05 12:22
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あせんうぶり言語
-
(再質問)エクセルのマクロボ...
-
100万件越えCSVから条件を満た...
-
電子書籍epub変換について
-
pandasでsqlite3にテーブル作成...
-
パソコンのスクリーンセーバー...
-
ビーリアルのユーザー名を変え...
-
MacBookAir起動時にRubyソース...
-
C言語の入力した文字を反転させ...
-
Ruby on Railsでボタンをクリッ...
-
三項でたとえば交換って
-
英数字を含む文字列(0-9,A-Z)...
-
じゃんけんのプログラムを作っ...
-
前回の質問の続き
-
a=2, b=1のとき”x=(a-b+3)%3”の...
-
エクセル 連続保存マクロ
-
ウェブサイトを別の会社のホス...
-
VBAのvlookupでエラーになって...
-
これらは書誌情報だと思うので...
-
情報の表現。()内がどうしても...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
rubyでバイナリファイルを直接...
-
rubyプログラム中の標準出力を...
-
Rubyで文字列の先頭を取りだす
-
初心者 パイソンプログラム
-
;nilの意味
-
Rubyで%uxxxのデコード
-
rubyについて詳しい方
-
Rubyでwebページを取得するとき
-
python 素数判定コード
-
小文字wと大文字Wの区別
-
システムエンジニアの適正について
-
web上のhtmlファイルから文字デ...
-
VB.NETで階乗を求めるプログラ...
-
COBOLのIFの入れ子について
-
Ruby / passenger のインストー...
-
Ruby interpreter (CUI) 2.2.3 ...
-
Passengerがインストールできな...
-
RubyでNo such file or directo...
-
プログラミング言語で大文字と...
-
式?文?節?
おすすめ情報