Simple Message Board - Waltraute
投稿件名  
お名前  
e-mail  
wwwpage  
投稿内容  
 パスワード (8文字まで,省略可)
 

follow-up message

 [62] 文字コード miny
  2004-12-03 20:34:15 modify  (修正x9:last 2005-05-06 13:54:46) InternetExplorer6.0/WindowsXp
  【文字コードの正式名称】
・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 に。プラットフォーム依存の変則的変換がありそうです。

follow-up message

58022 ACCESS / powered by MINyProjects.