Open Source WEB

\(5C)のキャラクタセットの変換にはどうも問題があるようだ。 次は何を調べれば良いのだろうか?


CONVERT()ではどのように変換されるのだろうか。

さて、キャラクタセットの変換を調べているのだから、 キャラクタセットの変換のための関数 CONVERT()が実際どのように 変換するのかをちゃんと調べておかねばなるまい。

今回は、端末の文字コードはSJISにしよう。

mysql> SET NAMES sjis;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT CONVERT( _sjis 0x5C USING ujis );
+----------------------------------+
| CONVERT( _sjis 0x5C USING ujis ) |
+----------------------------------+
| \                               |
+----------------------------------+
1 row in set (0.00 sec)

全角の\になってしまったけれど、これはサーバからクライアントに送られて 来たときにそうなったのか、それともサーバですでにそうなっていたのかが これだけでは分らない。

ということで、HEX()を使うことで、サーバ上でどのようになっているかちゃんと 調べてみよう。

mysql> SELECT HEX(CONVERT( _sjis 0x5C USING ujis ) );
+----------------------------------------+
| HEX(CONVERT( _sjis 0x5C USING ujis ) ) |
+----------------------------------------+
| 5C                                     |
+----------------------------------------+
1 row in set (0.00 sec)

ということは、sjis から ujis への変換では問題がないようだ。

次は、ujis から sjis への変換をやってみよう。

mysql> SELECT HEX(CONVERT( _ujis 0x5C USING sjis ) );
+----------------------------------------+
| HEX(CONVERT( _ujis 0x5C USING sjis ) ) |
+----------------------------------------+
| 815F                                   |
+----------------------------------------+
1 row in set (0.00 sec)

5C が、全角2バイトのシフトJISになってしまったようだ。 やっぱり、クライアントサーバ間だけではなく、 キャラクタセット変換関数でも同じように困った変換をやらかしてくれるようだ。

mysql> SELECT HEX(CONVERT( _latin1 0x5C USING sjis ) );
+------------------------------------------+
| HEX(CONVERT( _latin1 0x5C USING sjis ) ) |
+------------------------------------------+
| 815F                                     |
+------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT HEX(CONVERT( _utf8 0x5C USING sjis ) );
+----------------------------------------+
| HEX(CONVERT( _utf8 0x5C USING sjis ) ) |
+----------------------------------------+
| 815F                                   |
+----------------------------------------+
1 row in set (0.00 sec)

latin1 --> sjis, utf8 --> sjis も駄目なようである。

それにしても、何で全角の\にしてくれるんだろう。 どこからそんな情報を得て、そのように作ったのだろうか?


戻る:バックスラッシュ(\,5C)が文字化けする(続編)

次へ:全角の〜が半角の~に文字化けする


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us