Unicodeの使い方とその影響について

このQ&Aのポイント
  • Unicodeの存在に興味や疑問や怖さが募っています。半角1バイト 全角2バイトの扱いは将来的に廃止される可能性があるのか、ブラウザやチャットでの多言語同時表示がデータ送信負荷にならないのか、Unicodeによる保存・管理・通信の無駄に関する疑問があります。プログラマーの皆さんはどのようにUnicodeを使い分けているのか知りたいです。
  • Unicodeの存在に疑問を抱いています。半角1バイト 全角2バイトの扱いが将来的に廃止される可能性やブラウザやチャットでの多言語同時表示のデータ送信負荷について疑問があります。Unicodeを使うことで保存・管理・通信の無駄が増えるのではないかと思っています。プログラマーの皆さんはどんな風にUnicodeを使っていますか?
  • Unicodeについて興味と疑問、そして恐怖心を感じています。半角1バイト 全角2バイトの扱いがなくなる可能性やブラウザやチャットでの多言語表示のデータ送信負荷について心配しています。Unicodeを使って保存や管理、通信をすると無駄が増えるのではないかと心配しています。プログラマーの方々はどのようにUnicodeを使っているのでしょうか?
回答を見る
  • ベストアンサー

Unicodeは使うべきなのでしょうか?

※いまいち文字コードの事が良くわかっていない者です。 今まで、半角1バイト 全角2バイトでプログラミングして来ました。 しかし最近Unicodeの存在に興味や疑問や怖さが募っています。 ■質問1 ・半角1バイト 全角2バイトという扱いは  将来的に廃止され締め出されてしまう危険などが有るのでしょうか? ■質問2 ・ブラウザ/一部チャットのように多言語同時表示は  文字数分大量の無駄なデータ送信負荷になってないのでしょうか?  時に1文字6バイトにすらなるとも聞くだけに疑問です。 ■質問3 ・Unicodeだと、半角1バイト 全角2バイトの扱いに比べ  保存も管理も通信も、無駄が増えるだけにも思えてしますます。  Unicodeをプログラマーの皆さんはどう認識し使ったり使い分け  しているのでしょうか? 漠然とした質問で申し訳ないですが、 何かご助言を頂けますと幸いです。

noname#202167
noname#202167

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

  • ベストアンサー
  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

文字コードよりも、OSの歴史の勉強が必要かも? グローバルスタンダードという言葉をご存知でしょうか? 質問1  多分将来的には日本でしか使用されないでしょう。それも疑問ですが。  MS-DOSの時代にはこのコードが使用されていました。全角2BytというのはシフトJISという文字コードが使用されており、使用できる漢字は2千文字たらずです。現在の常用漢字すら全て表示させることはできません。 質問2  通信サービスが始まった頃は、通常のメタル回戦を使用してFAXみたいに通信をしていました。たかだか1200Bpsです。(150Byt/Sec)現在ではADSLでも数MBytの転送スピードがありますので問題にはならないでしょう。インフラの整備でますます早くなってくるでしょうから問題にはなりえないでしょう。無線LANのWi-Fiでも公称100M/sec実効でも10数~20M/せcはいくでしょう。 質問3  確かに無駄かもしれません。がHDDなんかは1セクターを8Kbytや16Kbytで管理しています。つまり1bytのファイルを書き込んでも16Kbytの容量を消費してしまいます。こちらの方がよっぽど無駄でしょう?でも大容量化によって問題にはなっていませんね。 Unicodeは6bytですが64bitCPUなら一気に8bytのデータを取り扱うことができますよ。それと何故Unicodeになったかは、全世界で同じOSが使用でき全世界の言語を使用できようにしたためです。Windows98あたりまでは、日本は日本向けのOS、アメリカはアメリカ用のOS。中国も韓国も、その他もろもろの国に対応したOSの使用になっていました。そのため文字コードでデータ(情報)の共有に支障をきたしていました。全世界で同じデータを共用するのならUnicodeは現在のところ外せない物です。

noname#202167
質問者

お礼

膨大な通信負荷を避けたい場合以外は気にする事などなさそうですね。 とても参考になりました。 ご回答ありがとうございました。

その他の回答 (5)

  • bajutsu
  • ベストアンサー率20% (139/693)
回答No.6

なんとなく、質問者が2バイト文字圏内だから疑問に持ってるだけな気がする。 普通、日本にいる限りは2バイト文字で事足りますからね。 ただ、世界規模で見た場合、2バイトで足りないだけの文字が存在するのは確かですし、 unicodeが目標としているような、全世界で共通の文字コード体系になって それが広がれば、「文字化け」で悩まされることはなくなるんですから。 たぶん、質問者さんは今まで文字コードで苦労したことないんでしょう? 私は、仕事柄、いろんな文字に接してますから文字化けにはよく悩まされますよ。 ISO8859-1の一部は、日本語環境では半角カタカナに化けますしね。 文字化け云々だけじゃなくて、作ったものを海外展開するのに ローカルな文字コードにしか対応していない場合と unicodeに対応して作っておくのとでは、どっちが楽かは想像に難くないでしょう。 とうことで、私は、unicode化の流れになんの疑問も持ちません。 ま、unicodeはunicodeでいろいろ面倒なんですが unicodeが目標としているところは分かります。 ■質問1 細く、長く残ると思います。 理由は、実装が楽だし、扱いやすい。 自分だけとか、身内しか使う予定のないちょっとしたツールとかの あからさまに国内onlyなものまで、unicode化はしないでしょ? ■質問2 送信負荷と言っても、文字の送受信なんてたかが知れてますし それ以上に多言語同時表示にメリットがあるということでしょう。 ■質問3 2バイトで事足りることしかしてないから、そう感じる。 “1バイト文字や2バイト文字と比較”したら、そりゃ無駄に感じるのは当たり前。 日本国内しか見てないから、そう思う。 たぶん、1バイト文字圏内の人で、外を見ないタイプの人は、もっと疑問に感じているでしょう。 ただ、今の通信インフラ、メモリ容量、処理速度等々を考慮したら微々たるものですし “世界”に目を向けたら、1バイトや2バイトじゃ足りないのは明白なんで…。 使い分けは、多言語表示するか、しないか?とか 海外の人にも使ってもらうことが想定されるかどうか?じゃないですか? 質問1でも答えたけど、身内が使う前提とかなら、全く意識しませんし。 もうちょっと広い視野で物事を考えましょう。

noname#202167
質問者

お礼

perlとcでの全角半角識別程度の苦労ならしましたが。 目的をできるだけ明確にしないと無駄になるという事ですね。 むしろUnicodeで組んで通信時だけ変換すれば良い話か…。 回答どうもでした。

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

そもそも「半角1バイト 全角2バイト」というのがおかしいわけで.... EUC って知ってます? まあ, まじめな話として Unicode を「完璧に扱える」プログラムが存在するとは思えないので, てきと~につまみ食いすればいいんじゃないでしょうか. ちなみに「Unicode を使えば多言語を扱える」というのは理論上正しいけど現実的にはほぼ妄想. あと, あんまり言いたくないんだけど Unicode には「半角」「全角」ってあったりするんだよね.

noname#202167
質問者

お礼

ご回答ありがとうございます。

回答No.4

>■質問1 コード体系としては残るでしょうけど、実際に使われることはないという意味で、いずれは消えていくと思います。(古語(漢文)、歴史的仮名遣いのような扱い) また、それらの文字コードを、ソフトウェアがサポートするかどうか、と言う意味でも使われなくなると思います。 http://www.gnu.org/licenses/licenses.ja.html jis(iso-2022-jp)で書かれていますが、IE、Safariでは文字化けして読めません。 半角、全角の言葉を使っているのはプログラマーだけではありませんし、 非プログラマー向け、および通称としての半角、全角は残ると思います。 もちろんプログラミングとしては半角、全角は不正確ですので、 1バイト文字、2バイト文字、3バイト文字、、、Shift_JIS、UTF-8などの表現になると思います。 >■質問2 データサイズの削減にShift_JISやEUC-JPなどが使われることはあると思いますが、極めてまれだと思います。 >■質問3 無駄もありますが、必要もあります。 データサイズの増大は無駄かもしれませんが、それ以上に多言語が扱えるのは有利だと思います。

noname#202167
質問者

お礼

ご回答ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

質問1 過去の遺産が残る限り、廃止されないでしょう。 質問2 データ転送の実体は実データ以外の項目もあり、 単に見えている文字だけではありません。それに、 転送速度が高速なので、通常は問題になりません。 質問3 音楽、画像といったものに比べれば大した話では ないと思います。 VBで使用するDLLを開発する場合、文字列の受け 渡しはマルチバイトです。但し、フォルダのIDリストを 受け取るとか、オブジェクトのプロパティやメソッドに アクセスする際のDISPIDを得る場合など、UniCode でしか処理できないAPIもあります。 ベースはマルチバイトでも語尾にWが付くUniCode用 APIを意識的に使うこともあります。 都合の良い方を使うだけの問題でしょう。

noname#202167
質問者

お礼

ご回答ありがとうございました。

回答No.2

> 今まで、半角1バイト 全角2バイトでプログラミングして来ました。 半角ってなんでしょうか。 全角ってなんでしょうか。 ちゃんと突き詰めて考えると,この部分から実は崩れ去ります。 > ・半角1バイト 全角2バイトという扱いは >  将来的に廃止され締め出されてしまう危険などが有るのでしょうか? 廃止も何も,半角や全角という言葉自体が公式に定義があるわけでもなく,特定の実装における状況を表現したに過ぎません。 > ・ブラウザ/一部チャットのように多言語同時表示は >  文字数分大量の無駄なデータ送信負荷になってないのでしょうか? >  時に1文字6バイトにすらなるとも聞くだけに疑問です。 昔のUTF-8は6 octetまで定義されていましたが,現在は4 octetまでです。 それはともかく,Unicodeという文字集合の全部の文字を表現することが必要なのですから無駄ではないです。 不要なので無駄だと思うのであれば,その文字コードを使わなければよいわけですし。 > ・Unicodeだと、半角1バイト 全角2バイトの扱いに比べ >  保存も管理も通信も、無駄が増えるだけにも思えてしますます。 上記の通りです。 文字集合としてUnicodeを使っているからといって,文字コードとしてUTF系を使わないといけないわけではないですから。 >  Unicodeをプログラマーの皆さんはどう認識し使ったり使い分け >  しているのでしょうか? Unicodeは当然のようにそこにあるものです。 従来コードが使いやすければ従来コードを使いますし, UTF系コードが使いやすければUTF系コードを使います。 単純に大きくてよく使われている文字集合という扱いです。 ちなみに,表示幅を文字の専有バイト数で決定しようとするアプローチは, プロポーショナルフォントの存在によって既に破綻しています。 また,×など,フォントによって幅が大きく違うものも存在します。 このため,表示幅を決めるには,いちど幅を取得するAPIを使って表示幅を取得し, フォントサイズを変更して再度表示幅を取得して入ることを確認する, というような手続きが必要になります。

noname#202167
質問者

お礼

ご回答ありがとうございました。 参考になります。

関連するQ&A

  • Vbscript Unicode文字の判定

    今、テキストファイルがあり、その中には「Unicode文字」が含まれています。 タックシール(ダイレクトメール用)に出力するのに、マンション名やビル名は改行しなければなりません。 1行に印字できる文字数は全角で20文字(40バイト)です。 したがって、「住所1」と「住所2(マンションやビル名)」の正確なバイト数を調べるのですが、今、「Unicode」のテキストファイルを作って、確かめたところ、半角文字は、そのまま「Asc()」で正の整数で返ってきます。 また、通常の2バイト文字(全角スペースから外字の最終文字)までは、負の整数で返ってきました。 しかし、「Unicode」文字は、常に「63」で返ってきます。 Character Code「63」は、半角の「?」です。 どうやら、「VBScript」は「Unicode」文字をすべて「?」として認識してしまうようです。 通常は、住所に「?」はないはずなのですが、最近、お客様のデータを見ていると、半角の「-」が、よく、半角の「?」に化けているので、「?」はちゃんと1バイトとして、Unicodeの文字は2バイトとして調べなければなりません。 VBAのように「Len()」と「LenB()」があれば、問題ないのですが、「VBScript」では、正しく動作しません(すべて「2」と返してきます)。 正確に文字数(バイト数)を調べるには、どうすればよいのでしょうか?

  • 【SQLServer】UNICODEから文字への変換について

    SQLServer2005を利用しています。 半角→全角変換の関数を作成するために、一度unicode関数を使用したいと考えています。 が、UNICODEから文字への変換方法がわからず困っています。 文字からunicodeへは、UNICODE関数があるのですが、逆はないのでしょうか? 一方通行にしか変換できないのでしょうか? ご存知の方よろしくおねがいします。

  • 半角全角混在データの中の半角文字だけをJAVAで抽出する方法

    UNICODEでは半角文字も全角文字も2バイト以上で表現 されるらしいので、どうやってすべての半角文字だけを 取り出したらいいか思いつきません。教えてください。

  • Unicodeについて質問です。

    Unicodeについて質問です。 あるテキストファイルからUnicode文字を検索したいと思っています。 Unicode形式で保存したくないテキストファイルがあるのですが、どうやらどこかにUnicode文字を使ってしまったようで検索に手間取っています。 かなりの文章量のテキストファイルなので目で探す事は非常に困難で、仕方なくUnicodeコード表を元に一文字ずつ検索しているのですがなかなかヒットしません。 アラビア語のような特殊な文字を記入した記憶はないのですが、こちらのコード表(http://nurucom-archives.hp.infoseek.co.jp/digital/unicode-table.html)によると半角数字もUnicode文字となっていたりするようで知らずに入力した可能性が高いです。 できればテキスト貼り付け(方言変換サイトなどのように)でUnicode文字を検索できるサイトか、もしくはフリーソフトのようなものはありませんでしょうか。 Unicodeについて教えていただけるだけでも助かります。よろしくお願いします。

  • 文字のバイト数を数えるには

    なんか一日一問になってしまったのですが、、 よろしくお願いします。 wchar_t 型に入っている文字のバイト数を数えるにはどうしたら良いでしょうか? L"あいう123" のような文字の場合UNICODEの場合12バイトですが、 全角半角区別して9バイトを求めたいです。 UNICODE環境では不可能でしょうか?

  • Unicode対応でも保存できない文字の保存法

    チャットで使うと不思議なこと(改行など)ができる半角スペースみたいな文字があるのですが、それを保存したいです。 クリップボードに貼り付けるまでは出来るのですが、その後、Unicodeに対応させたメモ帳に貼り付けても認識しませんでした。 また、Unicode対応のクリップボードの履歴を保存させるソフトでも表示されませんでした。その文字と普通の文字を組み合わせてコピーすると、普通の文字だけになっていました。 この不思議な文字は一体何なのでしょうか?どうすれば保存することができますか?

  • UNICODE対応にするメリットは?

    VisualStudio2005 VC++を用いたアプリケーション開発に、今まではマルチバイト文字を使ってきたのですが、時代の流れとしてはUNICODEに移行すべきなのかな、と漠然と思っています。 ここで疑問なのですが、ずばりUNICODEに移行するメリットは何でしょう? 今のままマルチバイトを使っていても困ることは無いような気がしますし、日本語版・英語版の両方をリリースする場合もリソースの言語切り替えで対応できていますので、UNICODEにどのような利点があるのか、いまひとつピンときません。

  • Unicodeについて

    お世話になっております。 papillon68と申します。 [バージョン] SQLServer2005 (Management Studio Express 9.00.2047.00) 早速ではありますが、今回ご教授頂きたいことはSQLSERVERでのUnicodeの扱いについてです。 PHPとAjaxとSQLServerの連携を行っています。 ソース(PHPとAjax)はUTF-8で書いています。 ここで、SQLServerへのやりとりもUTF-8で行いたいのですが、どのようにしたらよいでしょうか。 文字列を扱う列の型は「nchar、nvarchar、ntext」などを使っています。 UTF-8でSQLServerに登録すると2バイト文字(ひらがな、漢字など)が 入力したとおりに保存されます。 ですが、SQLServerからデータをSELECT文で抜き出したときに 2バイト文字が化けてしまっています。 どのようにすれば文字化けせずにソースもSQLServerもUTF8で行うことができるのでしょうか。 お手数をお掛け致しますが、ご教授よろしくお願い致します。

  • unicodeと2バイト文字

    文字コードにすごいうとい者なのですが、見慣れない _tmain なんていうものを見てしまって、少し調べてみました。 そうすると、なんだか2バイトでは世界中の文字はもとより、感じすらすべて表すことは不可能で、今のunicode主流は3バイトで表現するのだとか。 で、私の知識の中では、C言語ではwchar_tでunicodeを表現しているらしいのですが、それじゃあ足りないわけで、ちゃんとした3バイト文字を表現するための公式的?な記述方法は(WIN32 APIで)あるのでしょうか。(その他MFCなどでもあれば。) 本人こういう事柄について、今まで考えたこともなく、よくわからないまま質問しているので、どうぞ怒らないでください。 よろしくおねがいします。

  • VBAでUnicodeしか存在しない文字の判定について

    VBA初心者の質問ですが、宜しくお願いします。 エクセル上にUnicodeしか存在しない文字が含まれた文字列を入力するとします。 VBAでその文字列に、Unicodeしか存在しない文字が入力されているかどうかの判定をするにはどのようにしたらいいでしょうか? また、その文字列(Unicodeしか存在しない文字が含まれる)のバイト数を正しく取得するにはどうしたらいいでしょうか?