こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

中国語が文字コード変換で、一部文字化けする。

PHPとMySQLで中国語のサイトを作っているのですが、データベースから読み出した文字列が、GB2312に変換後一部の文字だけ「?」になってしまいます。

このサイトでは中国語以外に、既に日英のサイトがあってそれらは、

日:WEB = SJIS / DB = EUC
英 : WEB = UTF-8 / DB = EUC
中 : WEB = GB2312 / DB = EUC

という構成になっています。
ちなみに管理者画面では、日、英、中、全てのコンテンツを編集できるようになっていて、文字コードは、shift-jisにしてあります。

ですので、中国語のコンテンツを書き出すときは、

管理者画面:shift-jis

PHP処理:EUCに変換

DB:EUCで登録



DB:EUC

PHP処理:GB2312に変換

HTMLに書き出し


という流れになっています。
中国語のサイトを作られている方は少ないと思いますが、分かる範囲でアドバイスをいただければと思います。よろしくお願い致します。

投稿日時 - 2005-11-21 19:58:21

QNo.1793164

困ってます

質問者が選んだベストアンサー

中国語の文字コードを詳しく知らないのですが、中国語をEUCにするってのはそもそも間違えているのではないでしょうか。

多国語を扱う場合は素直にDBもソースもUTF-8などにしてしまった方が良いかと思います。

何が何DBはEUCで!!
って場合は、文字データをバイナリの状態で(BLOG型)に入れてやったりする必要があると思います。

出力形式を変えたり、それぞれの文字コードを把握しないといけないなどかなりめんどくさいと思います。
また、予想できない問題がいろいろあるんじゃないかな?と思います。

投稿日時 - 2005-11-21 22:53:43

補足

そうなんです。最初にUTF-8にするべきでした。ただ、日英のシステムを組んでいたときはまだ知識が少なかったため、EUCを選んでしまいました。

テーブルごとに文字コードが変えられたらいいですけどね。すでにシステムは動いており、後にはひけない状況だといえます。

BLOG型ではななく、BLOB型でしょうか?
それを一度試してみたいと思います。

症状としては、shift-jisで特定の文字だけ文字化けしてしまう、といったのと似ており、GB2312で特定の文字だけ文字化けしてしまうという感じです。

投稿日時 - 2005-11-22 11:13:56

お礼

結局、

SJIS

ではなく、

sjis-win

にすることで解決できました。
また、また今後のために文字データをBLOB型で保存することにしました。

現状では、

管理者画面(入力):sjis-win → DB:GB(EUC/BLOB型)
管理者画面(出力):DB:GB(EUC/BLOB型) → sjis-win
中国語サイト:DB:GB(EUC/BLOB型) → GB

という感じで処理することにしました。
BLOB型にするメリットがいまいち分かっていないまま、こうしてみたのですが、全然違うものなのでしょうか?

投稿日時 - 2005-11-22 14:16:55

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問