タグ

unicodeとrubyに関するtakaesuのブックマーク (3)

  • UTF-8からSJISに変換する時にはShift-JIS系エンコードの種類だけじゃなくてUNICODE正規化も気にしないとダメという話

    UTF-8からSJISに変換する時にはShift-JIS系エンコードの種類だけじゃなくてUNICODE正規化も気にしないとダメという話 利用シーン UTF-8で記述されたテキストをShift-JISエンコードに変換する機会はあります。 UNICODEで表現できる文字の種類の方がShift-JISに比べて圧倒的に広いのですべての文字が変換できるわけではありませんが、「これは変換できてよかろう」というものまでこぼれ落ちるケースは多数あります。 以下こぼれ落ちる例とその対応を示します。 サンプルコード まずはサンプルコード。 rubyで記述していますが、原理はどの言語でも同じです。 str = "あ~あ①髙島屋パバぱ" sjis = str.encode(Encoding::Shift_JIS, :invalid => :replace, :undef => :replace) File.

    UTF-8からSJISに変換する時にはShift-JIS系エンコードの種類だけじゃなくてUNICODE正規化も気にしないとダメという話
  • ruby1.9でBOM付きutf-8のファイルの内容をShift-JISに変換する

    utf-8のファイルの中身をShift-JISに変更しようと思ったらエラーが出たのです。 以下のような感じを実行しようとしたら、 aaa = open("aaa.csv").read p aaa.encode("cp932") 以下のようなエラーが出てしまったのです。 in `encode': U+FEFF from UTF-8 to Windows-31J (Encoding::UndefinedConversionError) どうやら変更しようとしたファイルは、もBOM付きutf-8というものだったようです。 ちなみにBOMとは、バイト順マーク(Byte Order Mark)というもののようで、文書ファイルの先頭に付ける EF BB BF という3バイトのバイナリデータのことのようです。ファイルの文字コードがUTF-8であることを明示するために付けることもあるようです。 で、エラー

    takaesu
    takaesu 2015/02/11
    Bomを削除する方法
  • Ruby にて文字と Unicode コードポイントの相互変換を行う - vivid memo

    Unicode のコードポイントを指定して文字を得たり、逆にある文字のコードポイントを調べたり、ということをする機会は結構多いと思います。 が、Ruby でそれをやる方法をぐぐってもあまり上位に情報が出てこないなー、と思ったので簡単にまとめておきます。 Unicode コードポイントとは そもそも Unicode コードポイントとは何か。 Unicode というのは世界中の文字が集められた文字集合であり、Unicode に収録されている文字には順番に番号が振られています。 この番号のことをコードポイントといいます。 あるコードポイントが指す文字を表現するときに "U+" という文字の後ろに 16 進数表記のコードポイントを書いて表すことがあります。 例えば、コードポイント 0x3041 が指す文字 (ひらがなの 「あ」) を U+3041 と書いて表します。 各文字とコードポイントの関係は

    Ruby にて文字と Unicode コードポイントの相互変換を行う - vivid memo
    takaesu
    takaesu 2014/06/25
    コードポイントの解説など含め、まとめられていてとてもわかりやすい
  • 1