- 締切済み
Unicode上しか存在しない文字一覧を調べたい
Unicode上しか存在しない文字一覧を調べたい というのも、画面上で「立方メートル(m^3)」を入力して保存後、画面を開きなおすと「㎥」という文字コードに文字化けを起こしてしまう事象が発生しました。 過去の質問などを調べたところ、以下のような動きになっていると認識しています。 (違ってたら補足お願いします;) 1.入力時: クライアントはWindows+IEを使用しているため、入力時にはunicodeに存在する「m^3」が表示される 2.データ登録時(クライアント→サーバ): クライアントからサーバ(Windows)上にデータを送信する際に、文字エンコードをwindows-31Jで指定しているため、文字コード「㎥」に化ける (※ここでwindows-31Jに「立方メートル」が存在しないため文字化けを起こして登録される?) 3.データ表示時(サーバ→クライアント): サーバからデータを送信する際にはshift-JISを指定しているため、文字コード「㎥」として送信される ※参考:http://okwave.jp/qa/q1676143.html そこで知りたいのが、このようにデータを登録すると文字化けを起こしてしまう文字の一覧を知りたいと思っております。 つまりUnicodeにのみ存在する文字の一覧を調べたいと思っているのですが…。 自分で調べた限りでは、↓のように、unicode文字の一覧は見つかったのですが、「unicodeのみに存在する文字」(=文字化けして表示されてしまう)文字の一覧というものが調べられず。。。 http://nurucom-archives.hp.infoseek.co.jp/digital/unicode-table.html http://d-toybox.com/studio/lib/romanNumerals.html#sample もし紹介しているサイトをご存知の方いましたら教えていただけると幸いです。 もしくは自分で調べるための方法などをご教示していただけると助かります。 (さすがに画面に65535文字打ち込んで調べるのは骨が折れます。。)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10361)
何をしたいのかによりますね。 1.データを自分が入力するときにSJISに無いコードを入れないようにしたいと言うことなら、SJISにあるコードを覚えるか、IMEに判断してもらう(2番の方の回答の通り)しかないと思います。 漢字まで覚えるのは大変ですが、記号だけなら十分記憶できますよ。 2.データ処理プログラムを作るのだが、入力がUnicodeで、そこからSJISに無い文字を除きたいということなら、そのプログラミング言語で使えるUnicode->SJIS変換ライブラリを使って判断させる(Javaなら1番の方の回答が参考になる)。 あと、Windowsで言うところのSJISというのは、本来のSJISに、JISコードにない文字も追加されて一部JISと文字も変えられたCP932というコードですので、含まれている文字がちょっと違います。
- SortaNerd_
- ベストアンサー率59% (309/522)
「Unicodeに存在してShift_JISに存在しない文字の一覧」という意味であれば、あまり意味のない行為だと思います。 これを作ることは可能でしょうが、膨大な量になります。 その上、その大部分は例えばハングルであるとかアラビア文字であるとか、表にするまでもなく表示不可能なことは分かりそうな文字です。 ですから必要なものは「変換で普通に入力できるがShift_JISに存在しない字」の表だと思います。 しかしこれはIMEの仕様が分からないので確実なものは作れません。 主にJISX0212補助漢字が多いですが、例えばm^3はこれに当てはまりません。 ただ、MS-IME2007やATOKではShift_JISに含まれない文字は「機種依存文字」と注意が出ます。 あるいは発想を変えて、Shift_JISで表示可能な文字の方を覚えておいて、それに含まれない文字は使わないようにするのはどうでしょう。 こちらの表なら探せばいくらでも見つかるでしょう。
- salsberry
- ベストアンサー率69% (495/711)
Unicodeにはあるけれど、Shift_JISにはない文字を調べたいということでいいですか? Javaで試した例です。 下のプログラムをコンパイルして $ java -Dfile.encoding=utf-8 OKWave5748809 > output.txt のように実行すると、UnicodeにあってShift_JISにない文字の一覧がUTF-8で出力されます。 public class OKWave5748809 { public static void main(String[] args) { for (char ch=0x80; ch<0xFFFF; ch++) { if (Character.isLetter(ch)) { try { byte[] sjis=(ch+"").getBytes("Shift_JIS"); if (sjis[0]=='?') { System.out.println(ch+": "+Integer.toHexString((int)ch)); } } catch (java.io.UnsupportedEncodingException e) {} } } } }