タグ

bitとUTF-8に関するyassのブックマーク (3)

  • 開発メモ: UTF-8とUCS-4の変換メモ

    UTF-8とUCS-4の相互変換をC/C++で書いた時のメモ。たぶんまた自分で読むので。 背景 文字のちょっとした正規化などの処理をしたいがiconvやICUなどの巨大なライブラリは使いたくないということがたまにある。嚴密な文字列処理をしたい場合にはそれらのライブラリを使った方が安全だし確実であることは言うまでもないが、ちょっとしたユーティリティを作るのにはちょっとオーバースペックである。 一方で、UTF-8文字列に対してはASCII用正規表現ライブラリを使えば検索や置換などの大抵の操作ができるので、自分でゴリゴリと変換処理を書かなければいけないことはあんまりない。 ただ、たまに自分で書きたくなることもある。ヨーロッパ系言語のアクセント記号を外したり、半角片仮名を全角片仮名にしたり、漢字の異体字表記を常用漢字に統一したりといった処理を一気にやりたい場合とか。そんな場合、各文字が可変長バイト

    yass
    yass 2013/08/13
    "詳細を見ると、UTF-8は本当によくできてるなぁと感心する。先頭バイトに 10AAAAAA というパターンがないというのが絶妙。6バイト使うとちょうど31ビット(INT32_MAX)まで表現できるあたりが美しいとしか言いようがない。"
  • UTF-8

    ASCII範囲内の文字はASCIIコードと完全に一致する 第2バイト〜第4バイトは必ず10…ではじまり,第1バイトのビットパターンとは重ならないようにしてある. この工夫により,もしも伝送誤りが起こったりした場合でも,その誤りの影響が1文字の中に収まるようになっている. ストリームを読み進めると数バイト先には10以外ののパターンがきているはずで,底が次の文字の先頭バイトだとわかる. 1バイトだけ覗いてみてもいろいろわかる 0ではじまっていたら→ASCII範囲内の文字で1バイトで表される文字 10ではじまっていたら→マルチバイト文字の第2バイト〜第4バイトのどれか 110ではじまってたら→2バイトの先頭文字 1110ではじまってたら→3バイトの文字の先頭文字 11110ではじまってたら→サロゲートペアで4バイトの文字 サロゲートペアはUTF-16でエンコードする場合, サロゲートペアの参照す

    yass
    yass 2013/01/26
    "1バイトだけ覗いてみてもいろいろわかる / 10ではじまっていたら→マルチバイト文字の第2バイト〜第4バイトのどれか"
  • Character encoding, Unicode, UTF-8 (and a bit of chauvinism) explained for the masses

  • 1