2010年1月 8日

[mysql 15135] Re: utf8文字化け(森鴎外)

こんにちは。池田です。

#出遅れた感がありますが。。。

鴎外の旧字は文字集合JISX0213に含まれるもので、MySQLだと以下の
文字コードがサポートしています。

utf8

eucjpms
ujis

cp932、sjisはサポートしていないため、変換が発生すると? (0x3F)に
置換されます。これが文字化けの正体です。

戸田さんの記述によると「utf8→sjis」変換が発生するような手順が
含まれていましたから、坂井さんが示されたように変換が発生しないように
すれば文字化けは解消されます。

以下、動作確認ログになります。

[test]> select 0xE9B797;
+----------+
| 0xE9B797 |
+----------+
| |   <---鴎外の旧字が手元では見えてます。
+----------+
1 row in set (0.00 sec)

[test]> select hex(convert(_utf8 0xE9B797 using eucjpms));
+--------------------------------------------+
| hex(convert(_utf8 0xE9B797 using eucjpms)) |
+--------------------------------------------+
| 8FECBF |
+--------------------------------------------+
1 row in set (0.00 sec)

[test]> select hex(convert(_utf8 0xE9B797 using ujis));
+-----------------------------------------+
| hex(convert(_utf8 0xE9B797 using ujis)) |
+-----------------------------------------+
| 8FECBF |
+-----------------------------------------+
1 row in set (0.01 sec)

[test]> select hex(convert(_utf8 0xE9B797 using cp932));
+------------------------------------------+
| hex(convert(_utf8 0xE9B797 using cp932)) |
+------------------------------------------+
| 3F |
+------------------------------------------+
1 row in set (0.00 sec)

[test]> select hex(convert(_utf8 0xE9B797 using sjis));
+-----------------------------------------+
| hex(convert(_utf8 0xE9B797 using sjis)) |
+-----------------------------------------+
| 3F |
+-----------------------------------------+
1 row in set (0.00 sec)


戸田峻 さんは書きました:
> 坂井さん
>
>> 戸田さん。鴎外の旧字ってヘンの中身が口三つのやつですよね。
>
> まさにその漢字です
>
>
>> 最初にINSERT文を作成して確認したのが秀丸エディタなので、
>> 結果の確認もまずは同じ環境で行ってみたらどうでしょうか。
>> (表示ツール側の対応状況により表示されていないだけの気がします)
>>
>> 方法例:
>> mysql サーバに接続(utf8で)
>> mysql> プロンプトで tee c:\out.txt と入力(ファイル名はご自由に)
>> mysql> プロンプトで SELECT * FROM <そのテーブル> を実行
>> 秀丸エディタで c:\out.txt を確認(utf8で)
>
> 上記方法例で文字化けがしないことが確認できました。
> ありがとうございます。
>
> すばやい返答ありがとうございました。
>
> また多方面からいろいろな情報をいただき皆様ありがとうございます。
> ・MySQL5のutf8は3バイトまでしか対応していません。
> ・UTF-8の4バイト対応は、MySQL6.0.4以降になります。
>
>
> 以上、ありがとうございました。
>
> 2010年1月8日12:15 SAKAI Kei <sak2@xxxxx>:
>> 坂井です
>>
>> 戸田さん。鴎外の旧字ってヘンの中身が口三つのやつですよね。
>>
>> 最初にINSERT文を作成して確認したのが秀丸エディタなので、
>> 結果の確認もまずは同じ環境で行ってみたらどうでしょうか。
>> (表示ツール側の対応状況により表示されていないだけの気がします)
>>
>> 方法例:
>> mysql サーバに接続(utf8で)
>> mysql> プロンプトで tee c:\out.txt と入力(ファイル名はご自由に)
>> mysql> プロンプトで SELECT * FROM <そのテーブル> を実行
>> 秀丸エディタで c:\out.txt を確認(utf8で)
>>
>> おそらく正しく表示されると思います。
>>
>>
>> Thank you
>> On Fri, 8 Jan 2010 11:44:30 +0900
>> 戸田峻 <todappi@xxxxx> wrote:
>>> 戸田と申します。
>>> 長々と記載して申し訳ありません。
>>>
>>> 現在一部のutf8の漢字が文字化けが発生してしまい解決が出来ません。
>>>
>>> 下記私の設定情報、現在の状態です。
>>>
>>> ・環境
>>> Microsoft Windouws XP
>>> MySQL5.1
>>>
>>> ・DBの文字コードの設定情報(下記コマンド実行)
>>> show variables like 'character_set%'
>>>
>>> 結果
>>> character_set_client | utf8
>>> character_set_connection | utf8
>>> character_set_database | utf8
>>> character_set_filesystem | binary
>>> character_set_results | utf8
>>> character_set_server | utf8
>>> character_set_system | utf8
>>> character_sets_dir | C:\Program Files\MySQL\MySQL Server
>>> 5.1\share\charsets\
>>>
>>>
>>> ・入力したデータ(入力した方法)
>>> utf8での漢字データの入力
>>> -varchar(10)属性に下記データ入力
>>> aaa
>>> 常用漢字
>>> 森鴎外(※鴎:おう 実際は旧漢字を入力してます)
>>>
>>>
>>> 方法
>>> -秀丸エディタにて文字コードをutf8に設定
>>> -簡単なinsert文を記述し(データに漢字を入力)、.sql拡張子で保存
>>> -コマンドプロントにてsourceコマンドを使用し上記作成ファイルを実行
>>> -結果は「Query OK, 0 rows affected (0.00 sec)」
>>>
>>> ・入力されたデータの確認(※この時点で文字化け発生)
>>> CSEで確認(CSE:sql開発ツール)
>>>
>>> -ODBCコネクタでutf8→sjisに変換(自動的にしてくれる)
>>> -CSEにてselectクリエ実行
>>> -出力されたデータ
>>> aaa
>>> 常用漢字
>>> 森?外(※旧漢字の鴎が?に文字化け)
>>>
>>> コマンドプロントで確認
>>> レジストリを弄り、utf8でMSゴシックを使用できるよう設定
>>> -レジストリエディタでCodePageとTrueTypeFontで65001を追加
>>> -コマンドプロントを開き、chcp 65001コマンドを実行(コマンドプロントをsjis→utf8に変換)
>>> -以下データベースに接続、select文実行
>>> -下記結果内容が出力される
>>> 入力されているはずのデータ
>>> aaa
>>> 常用漢字
>>> 森鴎外(※鴎:おう 実際は旧漢字を入力してます)
>>>
>>> 結果
>>> aaa
>>> 常用漢字
>>> 森?外(※旧漢字の鴎が?に文字化け)
>>>
>>>
>>> Windouws上でどうutf8の漢字データを入力して、どう確認していいのかが不明です。
>>> 何かご指摘があればお願いします。
>>>
>>> 以上、よろしくお願いします。
>>
>>
>>
>
>
>


投稿者 xml-rpc : 2010年1月 8日 12:33
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/92147
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。