パスワードを忘れた? アカウント作成
14853 story
プログラミング

文字エンコーディングはUTF8で本当に十分なのか? 227

ストーリー by GetSet
課題色々 部門より

ee1000mt 曰く、

RedHatの技術者であり、Debian開発者でもあるtagoh氏のblogに「 UTF-8は十分かどうか」という書き込みがある。
これは、「 シフトJISを捨てられるか?」というITproの記事に対して、Ruby開発者のMatz氏が 「『短いに越したことはない』というごく弱い理由で、さらに別のエンコーディングの必要性をほのめかさないでいただきたい」 と、自身の日記で述べていることに対して、 tagoh氏が意見を述べているものだ。

tagoh氏によれば、エンコーディングを増やさないことは賛同できるが、「UTF8でいいのか」というところには特に他言語を考慮した場合において疑問を呈し、 「エンコーディングに言語タグでも入れた方がいいんではないだろうか」と意見を述べている。
locale併用というのは今の方式だが、これでは複数言語を使えないわけで、tagoh氏の言語タグということには賛同できる。 さて、UTF8で果たして今後も十分なのか、そうじゃないとしたらどうあるべきなのだろう?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by fcp (32783) on 2007年03月11日 3時56分 (#1124111) ホームページ 日記

    いろいろな需要があるからいろいろな文字集合とその符号化方式があるのです。べつに昔との互換性だけが存在理由ではありません (もしそうならどうして 2004 年になって JIS X 0213 の改訂なんかしているのか)。

    ITpro の記事では、日本語文字列を扱うための符号化方式として、

    • Shift_JIS (シフト JIS の JIS X 0208 版) は 1 文字 2 バイト以内でデータ長は短いけれど JIS X 0208 にある文字しか表せないから不満
    • UTF-8/16/32 は新しい文字も表せるけれど、データ長が 1 文字 2 バイト以内にならないことがあるから不満

    という比較をして、

    日本語文字列を扱うのに,何か良いエンコーディングはないだろうか。

    と問題を提起して終わっているのですが……その条件なら、 Shift_JIS-2004 (シフト JIS の JIS X 0213 版) でよいと思います。 JIS X 0213 の文字が全部使えて、しかも 1 文字 2 バイト以内です。 (ただし、当然ながら 1 文字 2 バイト以内を堅持しようと思ったら今後文字を増やす場所があまりありません。)

    ITpro の記事の著者が存在を知らないだけ? JIS の規格票にも書かれている符号化方式なのですが。僕が何か勘違いをしている? (その可能性は高いです。)

    僕は 1 文字 2 バイト以内であることが重要になるようなギリギリの世界でプログラムを書く予定はないので、日本語以外も扱える UTF-8 や UTF-16 で十分です (UTF-16 は Windows のネイティブの符号化方式なので使います。それがなければ UTF-8 だけで十分)。でも、僕の需要だけ満たしてくれても駄目で、世の中にはいろいろな需要があるので、すべてが UTF-8 になるわけがありません。日本語の文字だけ表せればよくて、その代わり UTF-8 や UTF-16 では駄目なくらいデータ長に厳しい制約が課せられる状況では、 Shift_JIS-2004 が適任だし、そんな状況はありえなくはないでしょう (珍しいとは思いますが)。

    • by Stealth (5277) on 2007年03月11日 7時09分 (#1124136)

      業務上では外字を利用している場合もあり、この場合Shift_JIS-2004 では外字領域を潰して文字を割り振っている点により互換性が失われるところが致命的です。

      # 1 バイト 32bit 位にしてあげれば 2 バイトに収まるよ(w

      親コメント
  • 何周目かと (スコア:4, 興味深い)

    by Anonymous Coward on 2007年03月10日 18時25分 (#1123883)
    Linux から入った人はせいぜいEUC-JP→UTF-8 くらいしか知らないと思うけど、
    一度、Unicode 制定前後からの歴史を勉強したほうがいいと思うよ。
    文字の海、ビットの舟あたりを軽く流し読みした程度で、よく知らないで言うのは口はばったいとこも
    あるんだけども、シフトJIS みたいな完全にローカルな文字コードならともかく、それなりに
    多言語を考慮した文字コードってのはどの陣営にも存在してて、紆余曲折があって今みたいに
    なってるんだよね。
    結局最終的にどうなるのか、ってのは政治力に依存するんじゃないんかな。
    朝令暮改には正直うんざりなんだけども。

  • by Anonymous Coward on 2007年03月10日 18時45分 (#1123894)
    ただし、Language Tagging [unicode.org]からたどればわかるように、
    Unicodeはテキストを表現するための文字コードに過ぎないのだから、
    字形の違いのようなフォントに関する情報は、文字コードよりも
    上のレイヤーで扱うべきというのがUnicodeの立場だと思うのだが、
    tagoh氏やタレコミはその立場を踏まえた上で意見を述べているのだろうか?
    • by tagoh (2884) on 2007年03月11日 3時53分 (#1124109)
      うーん、たしかに。不勉強で申し訳ないです。

      ただ、誤解のないように申し上げると、「文字コードよりも上の
      レイヤーで扱うべき」というスタンスは理解した上で、(Language
      Taggingの存在を知らずに)あれを書きました。プレインテキスト
      自体が幅広く使われていて、多言語をひとつのファイルで書き連ねる
      ものも多く(主観ですが)、立場とは裏腹に需要もあるようですので。

      # /.Jへのタレコミは予想外でしたが、タレこんでくれた方のおかげで
      # 個人的にはたいへん有用な情報をたくさん拝見させて頂くことが
      # できたので、これはこれでよかったのかなと思っています。
      親コメント
  • Unicodeが流行る背景にはソフト開発のグローバル化がありますよね。
    英語版を作って日本語版にローカライズするのではなく、最初から内部処理はUnicode(UCS-2)で作って、UIのみ各国語で作る。以前、あるメールアプライアンス会社の人が「うちの製品はUnicode対応なので日本語にも対応している」と主張するアメリカのエンジニアに「日本ではISO-2022-JPという特殊なコードが使われている」ことを説明するのに難儀したと言っていました。簡単にいえば、インドでアプリを作って世界中に売りまくるビジネスが流行っているので、このままUnicodeで行くんじゃないですかね。

    もちろん、Unicode(UCS-2)あるいはその符号化方式としてのUTF-8やらUTF-7、書体への対応付けにはいろんな問題もあるんでしょう。しかし、「文字の話は7層に分けて考えてねー」 [ietf.org]って言っている人たちもいますよ。問題があれば符号化層ではなくて、上位層のタグ付けなどで解決するのがスジなんじゃないでしょうか。

    --

    /K
  • 全ての文字を表すなら (スコア:4, すばらしい洞察)

    by uxi (5376) on 2007年03月10日 23時43分 (#1124030)
    TRONコードって選択肢もある気がするのだが
    流行らないはどうしてだろう?

    うちの親、名前に特殊な漢字使ってるので、
    現状だと TRON コード以外では表記できないんだよね、、、orz
    JIS でも Unicode でも結構だが、
    未だに自分の名前すら漢字で表記できずにいる人がいるって事を
    ちったぁ考慮して欲しい、、、orz

    そもそも国も戸籍行政かかえてるくせに、
    この辺りのコード整備を怠り過ぎなんじゃないのかと、、、

    あと、古文書なんかを扱ってる方面の方々は、
    電子化する場合どうしてるんだろうか?
    --
    uxi
    • by Anonymous Coward on 2007年03月11日 0時59分 (#1124074)
      戸籍に使われてる漢字は、その昔、役所で受け付ける際に、
      役人が書いた崩し字・誤字などがそのまま「正式な名前(漢字)」として
      戸籍に登録されてしまっているケースが結構あるそうで、
      それゆえに、「点が1個無いだけ」とか「1個多いだけ」とか、
      似たような漢字が別の漢字として扱われています。
      もちろん、れっきとして別の漢字である場合もありますが、
      役人のミスが原因である場合も、少なくないようです。
      そういった漢字を統一するだけでも、かなりスッキリするのですが、
      日本人にとって、名前に使われる漢字はアイデンティティにもなっており、
      なかなか難しいようです。

      なお、古文書については、聞いた話ですが、
      草書体など、形に意味がある場合もあるそうで、
      (崩し方で時代や書いた人が分かる等)
      画像で管理していることが多いようです。
      絵画を活字として電子化しないのと一緒だそうです。
      きちんと活字に起こして電子化してる所もあるとは思いますが、
      まぁ自分が知ってるところは、そんな感じですね。
      親コメント
  • 完璧な文字コード (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2007年03月10日 19時01分 (#1123903)
    かつて、人々は完璧な1つの文字コードを使っていた。人々は天にも届くかと思われるほど大量の文書データを蓄積していった。これが神の怒りを招いたのである。

    神の一撃によって、人々は異なる文字コードを使うようになった。そして、世界は混乱していく。

    …、と「創世記」にあるとかないとか。

    -- A.C., nothing more, nothing less.
  • ぐちゃぐちゃだな (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2007年03月10日 19時32分 (#1123918)
    エンコード方式と文字コードそのものと、何の区別もなくダラダラとコメントが並んでら。
    • by Anonymous Coward on 2007年03月10日 20時00分 (#1123932)
      というか、Unicode/UTF-8の問題自体はるか昔から議論されて
      ある一定のところで閉塞してしまっていたのに、何を今さら
      という気がしますが…

      # そして、「今だからこそ」の新しい解決策なんて
      # 一つも提示されないですね :-P
      親コメント
      • Re:ぐちゃぐちゃだな (スコア:2, おもしろおかしい)

        by Anonymous Coward on 2007年03月10日 20時59分 (#1123956)
        ちょっと早いけど春だから新人歓迎キャンペーン中なんですよ。
        親コメント
      • Re:ぐちゃぐちゃだな (スコア:2, おもしろおかしい)

        by Anonymous Coward on 2007年03月10日 21時33分 (#1123968)
        > # そして、「今だからこそ」の新しい解決策なんて

        ちょっと古いけど富豪的アプローチ。

        文字をコード化するから問題が出るのです。文字をそのものを扱うべき。

        ・文字は画像として保持します
        ・外部(入出力、他プログラム)などとの通信には文字画像を使用します
        ・プログラム内部では、適当なコードに割り振ってもかまいませんが、けして外部に出してはいけません
        ・文字画像から内部コードへの変換にはOCR技術を用います
        ・OCRは常にパラメータの調整が可能、また学習機能により人間に近い判断方法を取れることとします
        ・入力の簡略化として、キーボード入力をするとプリインストールされた文字画像を入力したものとみなします
        ・出力の簡略化として、プリインストールした文字画像を使用することができます
        ・プログラミングの簡略化のために各種ライブラリを用意します

        -- A.C., nothing more, nothing less.
        親コメント
        • Re:ぐちゃぐちゃだな (スコア:3, おもしろおかしい)

          by Anonymous Coward on 2007年03月10日 21時50分 (#1123976)
          画像を扱うリソースの削減化を図るため画像の圧縮方式が提案されました。
          そして情報の認識には支障が無いので、非可逆圧縮の方式が採用されました。
          それは、Universal Transform Format - 8という呼び名で呼ばれたとさ。
          略してUTF-8。

          あれ?

          #似た文字は同じコードに割り当たるなんて特性は同じですけど、偶然ですよ。(w
          親コメント
  • by emk (30939) on 2007年03月11日 1時25分 (#1124084) 日記
    ここまで誰一人持ち出さないどころか「新しい解決策なんて一つも提示されない」とまで言われてる始末なのでとりあえず。
    Ideographic Variation Database Submission [unicode.org]
    公開レビューの締め切りは3月15日なので文句を言うなら今のうちです。
    4日しかない? 3ヵ月前からレビューしてたのに誰一人気付かないのもどうかと。
  • by O1iver (31019) on 2007年03月10日 20時17分 (#1123936) ホームページ 日記
    ÷2で文字数がわかるので便利です!

    個人的にはMatzきらいだけどMatzの意見に賛同。

    #あほぷろぐらまなのでID
    • by matz (2690) on 2007年03月11日 0時28分 (#1124062) ホームページ
      賛同してくれてありがとう。

      私のナニに賛同してくれたのかさっぱりわからないけれど、
      あなたが私をきらいだということはしっかり伝わりました(泣
      --
      まつもと ゆきひろ /;|)
      親コメント
    • by fukapon (4131) on 2007年03月10日 20時21分 (#1123939)
      ちょ、それじゃバグだらけだって。
      半角は1byteだから÷1ですよ!

      まぁ、ネタにマジレスだとは思うけど。
      そーゆー基本を忘れて書かれているプログラムを、実際に見ちゃってるとねぇ。
      親コメント
  • by Anonymous Coward on 2007年03月11日 1時11分 (#1124077)
    ここが一番理解に役だった。 [jbrowse.com]

    なぜか英語だけど、
  • 僕も複数言語を使えないためで、Localeの限定好きじゃない。
    ですから、言語タグを入れる方がいいじゃないと思います。
    言語タグはXML・HTMLのタグを使え方と同じように入れるかな?
    • by Anonymous Coward on 2007年03月10日 19時20分 (#1123914)
      <2ch>
       禿胴
      </2ch>
      <科学>
       現時点において否定する理由はなく、妥当な仮説として認められる。
       なお、この判断については、元コメントの定量化・反証可能性についての定式化が必要と思われ……
      </科学>
      <slashdot.jp>
       関係者なのでAC。
      </slashdot.jp>
      <テレビの報道番組>
       大変興味深い意見をありがとうございました。
      </テレビの報道番組>
      <テレビのバラエティ番組>
       <空気の読めないタレント>
        えー、私もー、ばいりんがるだしー、(以下略
       </空気の読めないタレント>
      </テレビのバラエティ番組>
      親コメント
  • 言語タグと聞いて、xml:lang 属性を連想してしまいましたが(タグじゃないけど)、言語指定は文字エンコーディングと同じレイヤでやらなくてもいいんじゃないですかね?
    --
    屍体メモ [windy.cx]
  • by Anonymous Coward on 2007年03月10日 18時23分 (#1123881)
    情報交換(他プログラムと、他マシンと)に使うものと、内部処理用は別にしていいですよね。たとえば、内部では1文字すべて64ビット、外部ではXMLで文字コード表記をgzip圧縮、とか。MuleなEmacsは内部3バイトでしたっけ?

    同じ文字かどうか問題。(いわゆる)全角と半角のアルファベットAは同じとすべきか。漢字だと旧字の扱い。各国語のA(似た文字も含めて)は同じとすべきか。検索しやすさ(プログラム内での処理含む)にかかってきます。migemoみたいに類似文字をORする正規表現を作成させて、それでマッチさせるとか?

    実装可能か、処理しやすいか。Unicodeがなんだかんだ言われても普及しているのは、実際に手を動かして動くものを増やしたからでは? ISO-2022との比較です。(比較できるものかな?)

    -- A.C., nothing more, nothing less.
    • 親コメントの考え方をストレートに解釈すると、標準コード体系には使用目的への特化なんて必要ないということですよね。

      Unicodeは情報交換や内部処理などの特定の目的に特化したものではありません。Asciiコードもそうですが、この手の標準コード体系は、どんな目的にもほどほどに使える中途半端な役割が求められます。そう考えると、今のUnicodeの中途半端さはまさに狙い通りだと思います。

      UTF-8は1バイト文化を引きずっていますが、今のところはMatzさんが言うように短いに越したことがないという論理が勝っています。将来的にはどうか分かりませんが。

      Unicode反対派は、このまま中途半端なものが定着するのを避けたいようですが、使用目的を考え出すとまず決まりません。使用目的を考えたところが間違いの元だと思います。
      親コメント
      • #1123881 [srad.jp] をどう解釈すると「標準コード体系には使用目的への特化なんて必要ないということですよね」なのか僕にはさっぱりわかりませんが、それはさておき。

        Unicode はいろいろな用途に使えることを目指して設計していて、それなりにいろいろな用途に使われています。一方、 Adobe-Japan1-6 (コード表 PDF [adobe.com]) などの CID 符号は書体内のグリフを区別するという用途に特化して設計していて、それはそれでちゃんと使われています。僕は知識不足でほかの例を挙げられませんが、ほかにも専用の文字符号は適材適所で使われていると思います。普段目にしないだけで。

        「Unicode 反対派」というのがどういう主張の人を指しているのか知りませんが、もしもその人たちが何らかの目的に特化した文字符号を提案しているなら、それはその目的に特化した文字符号が必要だと思ったからでしょう。それなら Unicode に反対しているのではなく、むしろ Unicode の領分は認めた上で Unicode では力不足の領域の状況を改善しようとしているだけのことで、それって「Unicode 反対派」と呼んでいいのかという疑問が出てきます。

        親コメント
  • んー (スコア:1, 興味深い)

    by Anonymous Coward on 2007年03月10日 18時41分 (#1123891)
    Unicodeには既にLanguage Tag(xml:langなどが使えるならそっちを使えということになってるけど)もVariation Selectorも入っているけど、それだけじゃ不十分ということなんだろうけど、では何が問題なのか、そこを聞きたい。
  • こういうのもなんなんですが、元ネタがあまりにしょうもないので、これをネタにみんなで文字コードの議論をして盛り上がれっていうのが投稿者の意図なんでしょうか。それとも、Matzさんとtagohさんという二人のキャラクターをいじりたいのでしょうか。

    言語の開発者とOSの開発者の視点がぶつかる見所を解説してもらえないでしょうか。
  • by meteor (18001) on 2007年03月10日 19時56分 (#1123931)
    個人的に日本語+ヨーロッパ諸語+サンスクリットを同じテキスト中で使う機会が多く、UTF-8、ユニコード自体はとても便利だと思います。

    ただ一番の問題はユニコードに完全対応した プレーンテキストエディタ が少ないということですねえ...
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...