![]() |
[62] 文字コード miny |
![]() |
2004-12-03 20:34:15
![]() |
【文字コードの正式名称】 ・JIS X 0208,Shift_JIS, 1983年に改定 ・JIS X 0221,unicode, ISO/ICE10646 ・JIS X 0213,Shift_JIS, 第3、第4水準を定義 ・Latin1, CP819, ISO-8859-1 【MS932(cp932)とSJISでの差異】 今までちょっと勘違いしていましたので、メモ。 ・〜[波ダッシュ] ・―[ダッシュ] ・‖[縦二重線] ・¢[セント記号] ・£[ポンド記号] ・¬[ノット記号] … 否定を表す数学記号らしい。使っているのは見たこと無いけど ・−[マイナス] ハイフン(‐)は安定しているようです。Windowsでサーバを立てる場合は、MS932で統一すると安定します。 Unixが絡むと、SJISとの相互変換を考えないと、うまくいかない場合があります。 (このBBSは、Windowsで立てているので全部MS932で運用しています。結果、うまく表示できてたりまします) ちなみに、この差異は、SJIS←→unicodeのコンバータと、MS932←→unicodeのコンバータが お互いに文字コードとして存在しない場所へのマップを行うために起こります。 例)MS932としてunicodeにマップした場合: この場合は、上であげた文字はSJISからは文字として扱えない場所にマップされています。 SJISでは扱えない文字なので、unicodeのコード値がそのまま保持されます。 MS932:123→unicode:あいう(MS932でのみアクセス) SJIS:123→unicode:ABC(SJISでのみアクセス) ※1,2,3,あ,い,う,A,B,C はいずれも仮の文字と捉えてください MS932でエンコードしてSJISでデコードすると、 期待値は、"123"ですが、"あいう"が得られます。 "あいう"はSJISでは扱えないので"???"となります。 ・さらに補足。 丸付き数字(@)などは、MS932コンバータは対応しているようですが、 SJISコンバータは対応していないようです。(文字化けする) ほぼWindowsから上がってくることを考えると、MS932コンバータを使用するのがベストかな。 サーバもWindowsなら問題になりませんが、SolarisなどのUnixサーバで、 かつSJISで扱う必要がある場合は、まずMS932コンバータをかけた結果に SJISコンバータとの差分(通常使用範囲で上の7文字)を強制変換するほうが良さそうです。 文字コードチェッカはそのうち作る予定なので、アイディアとして残しておくことにします。 #・・・実は、仕事で使ってるのがそういう環境(Solaris+SJIS)で、文字コードがらみはフレームワークが #変換した後なので、PG側は手出しが出来ません(>w< #まぁ、SJISの選択自体は私の責任じゃないし、シャクだけど、デメリットは飲んでもらおう #しかし・・・お客様に悪いなぁ・・・(^_^;; ・もう一つ小さく補足 ブラウザからMS932で送信してサーバでSJISで受け取ると、受け取るときにデータ自体が破壊されているようです。 例えば"@(0x8740)"の一文字を送ると"?(0x3f)@(0x40)"の二文字になり、元に戻せません。 おそらく、SJISコンバータが扱えない文字は特定の文字に置き換えている感があります。 byte[] … 0x8740 sjisで文字列生成(new String(byte[], "SJIS")) … 0x3f, 0x40 生成した文字をsjisでbyte[]に戻す … 0x3f, 0x40 ※unixサーバ(Solaris)では 0x21, 0x29, 0x40 に。プラットフォーム依存の変則的変換がありそうです。 |