UnicodeからBIG-5へ文字コード変換で文字化けする問題 - 解決方法を教えてください

このQ&Aのポイント
  • MySQL4.0.24+PHP4.3.11(Linux環境)で、日本語(EUC)と中国語(BIG5)の混在したデータベースを制作しています。具体的には、中国の施設の固有名称を中国語、日本語、英語表記で管理画面から登録します。MySQLへもUnicodeのまま保存しています。
  • MySQLからデータを参照し表示するページでは、日本語ページでは日英語のみ、中国語ページでは中英のみの表示であり、他にも理由があって、取り出したデータをmb_convert_encodingでEUC-JPやBIG-5へ変換して表示したいと思っています。
  • 日本語への変換は、EUC-jpへもShift-JISへも問題なく出来、表示がされますが、中国語に関しては日本語と同じ漢字の部分は変換されるのですが、日本語にない漢字の部分が??として表示されてしまいます。
回答を見る
  • ベストアンサー

mb_convert_encodingでUnicodeからBIG-5へ文字コード変換で一部が???に

MySQL4.0.24+PHP4.3.11(Linux環境)で、日本語(EUC)と中国語(BIG5)の混在したデータベースを制作しています。 具体的には、中国の施設の固有名称を 中国語、日本語、英語表記で管理画面から登録します。管理画面は3言語が同時に表示される様にUnicodeでページを作成。MySQLへもUnicodeのまま保存しています。 MySQL上では、どの言語も文字化けせず表示されています。 MySQLからデータを参照し表示するページでは、日本語ページでは日英語のみ、中国語ページでは中英のみの表示であり、他にも理由があって、取り出したデータをmb_convert_encodingでEUC-JPやBIG-5へ変換して表示したいと思っています。 日本語への変換は、EUC-jpへもShift-JISへも問題なく出来、表示がされますが、中国語に関しては日本語と同じ漢字の部分は変換されるのですが、日本語にない漢字の部分が??として表示されてしまいます。 PHPインストール時に --enable-mbstring=twも追加し、 mbstringの設定を確認しても Multibyte Support enabled Japanese support enabled Traditional chinese support enabled Multibyte (japanese) regex support enabled となっています。 他に確認すべき項目などもあるのでしょうけど、マルチバイト対応状況はバージョンが変わるとだいぶ変わっていたりして、検索してもなかなか情報が得られなかったので質問させて頂きました。

noname#23150
noname#23150
  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • cybert
  • ベストアンサー率56% (18/32)
回答No.1

実際のコードを見せて頂ければと思いますが。 私の経験からですと。 マルチバイト文字列関数を使用する前に 日本語だと通常は何もせずにマルチバイト文字列関数を使用できますが、まれに以下のようにコードで 明示的に宣言する必要がありました。 貴殿の場合ですと混在するページとのことなので japanese部分を書き換えてみてはいかかでしょう? mbstring.language=Japanese

noname#23150
質問者

お礼

ご指導ありがとうございました。 間接的に現場から状況を聞いていたので気づかなかったのですが、よくチェックしたら簡体字で入力したものを繁体字(BIG5)に変換していたことが分かりました。 正しい文字を入れ、正常に動きました。 ありがとうございました。

その他の回答 (1)

  • cybert
  • ベストアンサー率56% (18/32)
回答No.2

補足です マニュアルはご覧になられましたか? http://php.s3.to/man/ref.mbstring.html

参考URL:
http://php.s3.to/man/ref.mbstring.html

関連するQ&A

  • mb_convert_encoding で 一部の文字が変換できない。

    こんにちは、初めて質問させていただきます。 PHPでテキストファイルに保存されたEUC-JPの文字列情報を UTF-8で表示しようとしています。 第一水準、第二水準程度の日本語は問題なく変換ができてるのですが、 「(7)」や「VII」などの特殊な記号文字が変換できないようです。 これは mb_convert_encoding の仕様なのでしょうか? ご存知でしたらご教授お願いいたします。 【ソース】 $buffer = "マル4→(4) ギリシャ4→IV 郵便番号→〒 株式会社→(株) \n"; echo mb_convert_encoding($buffer, "utf-8", "euc-jp"); 【出力結果】 マル4→? ギリシャ4→? 郵便番号→〒 株式会社→? 【環境情報】 Linux (OS、バージョン詳しくは分かりません。) PHP Version 4.3.9 mbstring.detect_order      no value mbstring.encoding_translation  Off mbstring.func_overload      0 mbstring.http_input       pass mbstring.http_output       pass mbstring.internal_encoding    EUC-JP mbstring.language        Japanese mbstring.script_encoding     no value mbstring.substitute_character  no value (Local Value、Master Value 共に同値です。)

    • ベストアンサー
    • PHP
  • 中国語が文字コード変換で、一部文字化けする。

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

    • ベストアンサー
    • PHP
  • UNICODEへの文字コード変換

    以下のようにして、 日本語で書かれたファイルを読み込んで、 UNICODEに変換したいのですが、 できません。。。 どこが間違っているのでしょうか?(;;) 元の日本語ファイル「こんにちは」 >>できたファイル「\u3053\u3093\u306b\u3061\u306f」 という風にしたいのですが。。 //FileIOSteramの作成 FileInputStream fis = new FileInputStream(iFile); FileOutputStream fos = new FileOutputStream(oFile); //Stream ラップ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); System.out.println(System.getProperty("file.encoding")); //読み込みと書き込み int c; InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); while((c = in.read()) != -1){ out.write(c); }

  • ファイル名のコード変換

    vinelinux3.2から無線LANカードの関係で、kernel2.6をどうしても使いたく、fedra core5に変えました。 快適に動作するのですが、過去作成したファイルが、EUCからunicodeに変わった結果、ファイル名が文字化けしてしまい、読めなくなってしまいました。 ファイルの中身は、nkf等の変換ツールで変換できますが、ファイル名をEUCからunicode(UTF-8)に変換する方法はないでしょか? 日本語のファイル名を使うほうが悪いという、ご指摘は重々にわかりますが、ワークステーションとして利用していたので、日本語のファイル名も使います。 また、unicodeからEUCに変更すれば?と言われそうですが、この機会に、unicodeに変更したいと思います。 よろしくお願いいたします。

  • PHP+MySQLでSJISからEUCへの文字コード変換方法を教えてください。

    こんにちは。いつもお世話になっております。本来であれば自サーバーで検証してから質問すべきだとは思いますが、現在稼動中のサーバーしかなく、止めることができないので質問させていただきます。 現在、PHP+MySQLでサイトをSJISコードで運営しておりますが、「表」「能」等のSJISの文字化け対策が面倒になってきまして、EUCに変換してしまおうかと検討しております。 現状の日本語に関する設定は下記のようになっております。 ▼MySQL(my.cnf) バージョン:4.1.20 [mysqld] default-character-set=sjis init_connect="SET NAMES sjis" [mysql.server] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ▼PHP(php.ini) バージョン:4.3.9 mbstring.internal_encoding = SJIS mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto PHP内でMySQLと接続した直後に次のようにSJISを指定しています。 $sql="SET NAMES sjis"; mysql_query($sql); ちなみに、MySQLはMySQLadminで管理しておりますが、テーブルの照合順序は全てsjis_japanese_ciになっています。 上記のような内容ですが、この場合SJISからEUCに変換する場合の手順として、下記の流れでよろしいでしょうか? 1.PHPファイルをEUCコードに変換。 2.php.iniのSJISの部分をEUCに変換。 3.MySQLの設定ファイルのsjisの部分をujisに変換。 4.MySQLのテーブル内のデータを全てエクスポートして、外部エディタでEUCに変換後インポートする。 特に上記4の作業はテーブル数及びデータが膨大なため結構な作業になってしまいそうです。 もしもっと楽な方法があればご教授いただければ幸いです。なお、サーバーはRed Hat Enterprise Linuxです。

    • ベストアンサー
    • PHP
  • 文字コード変換

    SJISで取得したダブルバイト(日本語)の文字列を EUCで表示したいのですが どのようにすればSJISの文字列をEUCの文字列に変換することができるのでしょうか?

    • 締切済み
    • PHP
  • mb_conver_encoding()の挙動

    就職活動の為、内定を頂いた会社から 初心者だけど、独学の実力を見るうえで課題を出されました。 あるuibuntu Linuxでバッチプログラムを作っています。 大体の挙動は問題ないのですが。 文字コードをEUC-JPでcsvに出力する点で 文字コードが変換されていないようなので、質問させてください $this->msg = mb_convert_encoding($this->msg,'EUC-JP','auto'); と記述して、出力した後、 kkc -c コマンドで出力ファイルの文字コード取得したところ ASCIIと表示されました。 php.iniは mbstring.detect_order = auto default_charset = "EUC-JP" mbstring.internal_encoding = EUC-JP mbstring.http_output = EUC-JP お手数ですが、ご教授願いないでしょうか。

    • ベストアンサー
    • PHP
  • 文字コード変換の場合わけ。

    あるURLのソースの文字コードを判定してUnicodeに変換する メソッドや方法はありませんか? URLによってshiftJISでかかれていたり、EUC-JP で書かれているページがあるのでそれを 判定してUnicodeに変換して出力する方法が欲しいのです。 現在は InputStreamReader isr = new InputStreamReader(is,"EUC-JP"); コンストラクタを用いてコード変換を行っています。 お願いします。

    • ベストアンサー
    • Java
  • 文字コード変換ツール

    テキストファイルの文字コード変換ツールを探しています。 変換を行うのは、Shift_JISとUnicode、Unicodeと韓国語、Unicodeと中国語 です。 私が試したのは、1行が512バイトを超えると切れてしまいます。 複数(多数)のファイルをまとめて変換できると尚可です。 (ちなみに、秀丸はあるのですが、何とかして、まとめて変換できないでしょうか。) OSはWindowsXP

  • PHP+MySQLでの検索処理について2

    前回質問させて頂いた件ですが詳細情報を追記致します。 PHP+MySQLで部分一致検索の処理を作成しているのですが ある文字は正常に検索できてある文字は正常に検索できていないといった文字によって動きが異なります。 原因が不明なのでどなたか教えてください。 宜しくお願いします。 【現象】 下記の(1)(2)のDB項目を"作成"の部分一致で検索しても(1)しか検索されない。(両方とも漢字) (1)XXX作成 (2)○○○作成 【環境】 PHPのバージョン・・・4.4.2 MySQLのバージョン・・・4.0 【検索SQLの一部】 "テーブル名 LIKE '%".mb_convert_encoding(検索文字列,"UTF8","SJIS")."%'"; 【php.info情報】 mbstring.http_input:auto mbstring.http_output:SJIS mbstring.internal_encoding:SJIS mbstring.language:Japanese mbstring.encoding_translation:On Multibyte Support:enabled Multibyte Support :enabled

    • ベストアンサー
    • PHP

専門家に質問してみよう