• ベストアンサー

文字コードについて理解できません・・

データベース内はShift_jisでJavaはUnicode・・でWeb系アプリ 開発をするとします。 その際発生する文字変換における文字化けや内部変換におけるしくみが 色々参考書を読みましたが理解できません。。 最近ではアレルギーになりつつあります。 参考になるお話やサイトなどあれば是非ご教授お願いします。

noname#46520
noname#46520

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

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.3

> 参考になるお話やサイトなどあれば是非ご教授お願いします。 JIS区点コードとShift_JIS/EUC-JPの関係 http://www.hosibune.net/~mak/technical/kanji.shtml 文字コード表 http://ash.jp/code/index.htm 歴史的仮名遣いとフォント http://www.horagai.com/www/moji/int/itikawa.htm 文字コード全般 http://www.kanzaki.com/docs/jcode.html 文字コードをめぐって http://hp.vector.co.jp/authors/VA011700/moji/code00.htm 多言語入力検索ツール http://code.cside.com/3rdpage/jp/ いっぱいあります。これ以外にもたくさんあります。 簡単に説明すると、Unicodeはいろいろな事情により、漢字は簡体字繁体字日本語韓国語ですべて統一して文字コードが割り振られています。そのため、Unicode漢字はJIS区点コードとは並びがまったく違います。したがって、必ず変換表が必要になります。また困ったことに変換表が処理系により非互換な部分が一部あったりします。 さて > そもそもの基本ですが > JIS←→UTF > の相互変換ってうまく行くのでしょうか?。 > 例えばJISにあってUTFにない‥とかなんですが… JIS 第一水準の漢字と第二水準の漢字はすべてUnicodeに採用されていますのでこの範囲では相互変換に問題はありません。 JIS 第一水準の漢字以外では、また、ギリシャ文字やキリル文字などの全角にしかない記号類はUnicodeの該当文字にすればよいでしょう。また、全角ひらがなと全角カタカナ、および句読点等の一部記号はもちろんUnicodeにそのまま採用されていますのでほぼ問題ありません。 問題になるのは、全角記号($とか%とか)などの、本来半角であらわすべき記号群がJIS第一水準の1区に大量に採用されていることと、半角カナという本来全角であらわすべき文字があることです。JISに全角でしか存在しないギリシャ文字などはそのまま全角に戻す以外にあらわす方法がありませんから問題にはなりませんが、半角と全角に両方ある記号($,$とか%,%とか)はどうするのか、ということです。 それ以外では、これはある程度瑣末な問題ですが、ひらがな、カタカナの濁点・半濁点の取り扱いはどうするのか(組み合わせ文字「カ゛・MacOS風・半角カナ方式」にするのか完成形「ガ・Windows風・全角カナ方式」にするのか)ということも問題になることがあります。 さて、データベースとJavaのサーブレット、両方があなたの管理下のサーバー内のことですから、 ・すべてJIS区点コード範囲内で取り扱う ・上記の半角・全角等の問題は特定の変換表を使うなどとしておけば問題は発生しないと思います。 重ねて言いますが、Unicode⇔JIS区点コード間は必ずなんらかの変換表が必要になります。 ここで実際にどういう変換表を使うかが問題になるわけなのですが、まあたとえば上記コード表(http://ash.jp/code/index.htm 元はUnicodeコンソーシアムの変換表)を使うというのもいけますし、Javaの変換表をそのまま流用する(Shift_JISでJavaに入力する)方法もあります。 とにかく独自で変換表を用意するにせよ、Javaの変換表を利用するにせよ、内部で使用する分の変換表は絶対にひとつに統一するべきです。

その他の回答 (2)

  • process9
  • ベストアンサー率29% (81/272)
回答No.2

process9です。 変換を学ぶ前に文字コードとはなんぞや? という部分を完全に理解をすると、文字化けの理由や変換方法は自然と理解できると思います。 わかりやすく簡単に説明しているサイト http://www.shoshinsha.com/pukiwiki/pukiwiki.php?%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9%A4%C8%A4%CF ちょっと専門的に・・・ http://www.sodan.ecc.u-tokyo.ac.jp/2001/article/tips/tips15.shtml 今制定されている文字コードがどうやって決められたか、変換時の注意点などの詳細情報 http://euc.jp/i18n/charcode.ja.html あたりでわかると思います。 要は、数値と表示文字画像(一般にこれをフォントという)の 対応表の数値(コード)のことです。 この対応表(文字コード表)が曲者で、 世界で1つしかなければ問題ないのですが、そうもいかないので いろんな種類(JIS,EUC,UTFなど)の対応表が制定されています。 なので、書き手と読み手の使う対応表が一致しない場合 文字化け(表示文字画像の誤変換)だと認識されるのです。 なので、本来文字化けといわれる現象は、文字(表示文字画像)が化けているのではなくて 表示文字誤変換とでも言った方が本当は正しいのですが。。。

noname#46520
質問者

お礼

皆様、詳細なご説明ありがとうございます。 ご紹介の資料読んでちょっと勉強します。。 そもそもの基本ですが JIS←→UTF の相互変換ってうまく行くのでしょうか?。 例えばJISにあってUTFにない・・とかなんですが。。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

コード変換には色々有りますが歴史の古い1番泥臭い方法を。 8ビットコードと8ビットコードを相互変換するとします。 xコードでAがX38でyコードでX55とします。 このときy表のX38の欄にX55を入れておきます。 逆にx表のX55の欄にX38を入れておきます。 これでどちら側からでも一発でコード変換が出来ます。

関連するQ&A

  • HTMLから入力される文字コードについて

    HTMLにテキストボックスを配置し、入力された値をアプリケーションサーバ上(Java)で処理するというアプリを作成しているのですが、テキストボックスに環境依存文字(Unicode)とShift-JIS文字が混在した場合にHTTPRequest内が文字化けしてしまいます。 環境依存文字が入力されたかどうかはサーバー側では判別不明(既に文字化けしてるため)なんですが、一般的にはどう処理しているのでしょうか??

  • 各キャリアの文字コード

    プログラマー初心者です。 サイトの開発を計画中なのですが、 PC(OS)、スマホ、携帯すべてのブラウザに対応している文字コードはなんでしょうか? 調べてみると携帯3社は"UTF-8","Shift-JIS"などバラバラに書かれていたので。 (UTF-8が使えないauのみmb_convert_encodingを使い、文字エンコードを変換?) PC・スマホも(データベースも)含め全て統一したいのでやはりUTF-8が適切でしょうか? HTML5で<meta charset="UTF-8">とだけ指定しています。 またサーバからメール送信などを行う際はShift-JISで全て文字化けしないでしょうか?

  • リダイレクトする時の文字コードをUnicodeに

    現在、VisualStudioで、システムコールの標準出力結果をリダイレクトしてファイルに保存する プログラムを書いています。 _tsystem(command); のような感じで、commandには "hogehoge > hoge.txt"のように入ります。 ※command はTCHAR この出力結果が、Shift-Jisになっているようで、Shift-Jisだと日本語が文字化けせずに表示されるのですが、Unicode UTF-16にすると文字化けしてしまいます。 Unicode UTF-16とかUnicode UTF-8など文字コードを指定してリダイレクトできないのでしょうか。 ちょっと調べてみましたがうまく見つかりませんでした。

  • 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)

    【疑問の背景】 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)   国際標準で使われているUTF-8で統一しておけば問題はないだろうと思って開発を進めていると・・・   UTF-8は「日本語が2~4バイト」で扱われるという、バイトの扱いが厄介であるため、   できればJavaでのUTF-8で開発は避けたい、だから「Shift-JIS」にしておきたいという話があがり、   各々のファイルにどの文字コードを設定すれば良いのかがわからなくなっている状態です。    いくつかの疑問がでていまして  判る範囲で構いませんので文字コード設定の判断についてのアドバイスいただけませんでしょうか? 【現在の開発文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): UTF-8 Javaファイル(Bean): UTF-8 Javaファイル(JSPから出来たサーブレット): UTF-8 データベース: UTF-8 【設定したい今後の予定文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): Shift-JIS Javaファイル(Bean): Shift-JIS Javaファイル(JSPから出来たサーブレット): Shift-JIS データベース: UTF-8 【疑問1】 javaファイル(servlet,Bean)をどのコードにすべきかについて  全てS-JISにした方がいいのか、UTF-8にした方がいいのかどうあるべきなのでしょうか?  (UTF-8 で 「日本語が2~4バイト」として扱われると、どういった弊害が発生するのでしょうか?) 【疑問2】 javaファイルをS-JISに変える方法について  今はサクラエディターというツールで  名前を付けて保存 → 文字コードセット「Shift-JIS」 → 保存 → ファイル名の文字コードセットの変更完了    今はエクスプローラーから直接フォルダの中にあるファイルを触っている状況なのですが、  eclipseから「ファイルの文字コードセットを変更する方法」はありますでしょうか? 【疑問3】 「Shift-JIS」に設定して開発していく必要性について  既存で「utf-8」で設定されているjavaファイルを、「Shift-JIS」に設定して開発していく必要性はあるのでしょうか? (all in one eclipse 3.4 を入れたとき、デフォルトで「utf-8」でjavaファイルが作られるつくりになっているみたいなのですが・・・)   【疑問4】 javaファイル作成時、「Shift-JIS」の形式でファイルを生成する方法について     現在、javaファイルを作成する場合「utf-8」のコードでjavaファイルが生成されるようになっています。      【自作で作成したjavaファイルの場合】    「サクラエディターを使用して、文字コードセットをShift-JISに変更すれば、ずっとShift-JISのファイルの状態」にすることができました。      しかしここで問題が出たのですが      【JSPファイルから自動生成されたjavaファイル(servlet)の場合】    「サクラエディターを使って、Shift-JISに変更した後に、JSPファイルを編集すると、また“utf-8に戻ってしまう” 状態」です。    現状としては「JavaファイルはShift-JISに統一して欲しい」という要望なので、    JSPから自動生成されたjavaファイルが "utf-8" になってしまいます。      JSPから自動生成されたjavaファイルを    "常にShift-JISに設定する" 方法はありますでしょうか?     【環境】  OS   ・WindowsXP Pro    java開発環境   ・all in one eclipse(3.4)   ・TomCat(6.0)   ・Java JRE(1.6)   ・MySQL(5.0)

    • ベストアンサー
    • Java
  • 内部文字コードとは?

    javaは内部では文字をユニコードとして扱うとは、 どういう事でしょうか? 例えば、javaのブログラムをwindows上で作ったとして、 「こんにちわ」と出力させるプログラムを作ったとすると、 public class Hello{ public static void main(String[] args) { System.out.println("こんにちわ"); } } となりますよね、この時、このjavaのソースファイルを、 ユニコードとして保存して、コンパイル、実行しないと、 正常に動かないという事でしょうか? つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、 文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?) 要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。

  • コピーすると文字コードが変わっちゃう

    プログラムを(ちなみにPHP)エディター(ちなみに秀丸)で入力して保存時にエンコードの種類を「Unicode(UTF-8)」で保存 もちろんプログラム(HTML/PHP記述)では <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> を指定しています 実行すると文字化けも起こらず正常にホームページが完成しました それをコピーして別のサーバーにアップすると正常にホームページが開かないんです 文字化けだけでなくソースが画面に表示されました そのソースも文字化けです コピー先をエディターで開くと「日本語(Shift-JIS)」になっていました コピー元は「Unicode(UTF-8)」です なぜでしょう? そもそも「Unicode(UTF-8)」をコピーするには単純にコピーしてはいけないのでしょうか? プログラムの量が結構あるのでこの「日本語(Shift-JIS)」を一括して「Unicode(UTF-8)」に保存できるようなツールはないのでしょうか?

  • 文字コード変換ツール

    テキストファイルの文字コード変換ツールを探しています。 変換を行うのは、Shift_JISとUnicode、Unicodeと韓国語、Unicodeと中国語 です。 私が試したのは、1行が512バイトを超えると切れてしまいます。 複数(多数)のファイルをまとめて変換できると尚可です。 (ちなみに、秀丸はあるのですが、何とかして、まとめて変換できないでしょうか。) OSはWindowsXP

  • 文字コードに関して

    自分は、今までHTMLとPHPを利用してサイトの構築をしてきました。 shift-jisでしか記述した事が有りませんが、文字化けの問題もなく今までやってこれました。 今回は、mySQLを利用してサイト(PC及び携帯)の構築を試みております。 その際に不安な点が幾つか有ります。 HTMLとPHPは今後もshift-jisで問題ないのでしょうか? その際、mySQLの文字コードもshift-jisにした方が良いのでしょうか? 下記の関係での推奨文字コードをアドバイス願います。 皆さんが開発者だったら、コレで書くのがベストと思えるパターンと理由も教えていただければ参考にさせていただきますので宜しくお願いします。 mySQL > PHP > HTML

    • 締切済み
    • PHP
  • 文字コード

    少し、聞かせてください。 今、WEBアプリケーションを作っています。 HTMLからのリクエスト文字を受け取りServletで処理を考えています。 そこで、 String para = request.getParameter(para); String param = new String(para.getBytes("8859_1","JISAutoDetect"); で、8859_1,Shift_JIS,EUC-JP,ISO-2022-JP の Unicode 変換することが できるのは、分かりました。 では、この HTML からのリクエスト文字が、どのタイプの文字コード でかかれているかを検出できるのでしょうか? 自分では、バイト列をつかさどる方法が浮かぶのですが・・・。 HPでもかまいませんので、教えてください。

    • ベストアンサー
    • Java
  • Webアプリのエンコードの仕組みについて教えてください

    Webアプリのエンコードの仕組みについて質問があります。 WindowsでJSPを作成した場合、 <%@ page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS" %> を指定すると、Shift_JISで記されたソースであると認識して、コンパイル時にUnicodeに変換される。そして、例えば、Unix等の別プラットフォームでも、そのままのソースで実行できると理解しております。 そこで疑問が生じるのですが、Unicodeに変換されたものは、何処の指定により、プラットフォームに合ったコードに変換されるのでしょうか? それとも、私の理解自体がおかしいのでしょうか? ご解答よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう