34

これが最初に発生したのはいつかわかりません。

私は新しい直送アフィリエイトウェブサイトを持っており、卸売業者から製品カタログのエクスポートされたコピーを受け取ります。これをフォーマットしてPrestashop1.4.4にインポートします。

Webサイトのフロントエンドには、製品テキスト内に奇妙な文字の組み合わせが含まれています:Ã、Ã、¢、â、など。これらは、、-:などの一般的な文字の代わりに表示されます。

これらの文字は、ps_product_langのような製品固有のテーブルだけでなく、データベーステーブルの約40%に存在します。

別のWebサイトのスレッドでは、データベース接続文字列が誤った文字エンコードタイプを使用している場合に、これと同じ問題が発生すると述べています。

/config/setting.incには、文字エンコード文字列は記載されていません。MySQLエンジンのみがInnoDBに設定されており、PHPMyAdminに表示されるものと一致します。

ps_product_langをエクスポートし、これらの文字のすべてのインスタンスを正しい文字に置き換え、CSVファイルをUTF-8形式で保存し、言語としてUTF-8を指定してPHPMyAdminを使用して再インポートしました。

ただし、PHPMyAdminで新しい検索を行った後、ps_product_langにこれらの不正な文字のインスタンスが最初の約10倍になりました。

問題がデータベース接続文字列で正しい言語属性を指定するのと同じくらい単純な場合、これをどこで/どのように設定し、何を設定しますか?

ちなみに、このスレッドで言及されているPHPMyAdminでこのコマンドを実行しようとしましたが、問題は残ります。

SET NAMES utf8

更新:PHPMyAdminによると:

MySQL文字セット:UTF-8 Unicode(utf8)

これは、前回のインポートファイルで使用したのと同じ文字セットであり、文字の破損がさらに発生しました。インポートプロセス中に、インポートファイルの文字セットとしてUTF-8が指定されました。

UPDATE2

サンプルは次のとおりです。

人々は本当に束縛されていない生活を送っています。オンラインで映画を購入およびレンタルし、ソフトウェアをダウンロードし、ファイルを共有および保存します。ウェブ。

UPDATE3

PHPMyAdminでSQLコマンドを実行して、文字セットを表示しました。

  • character_set_client utf8
  • character_set_connection utf8
  • character_set_database latin1
  • character_set_filesystemバイナリ
  • character_set_results utf8
  • character_set_server latin1
  • character_set_system utf8

したがって、おそらく私のデータベースをUTF-8に変換(または削除して再作成)する必要があります。MySQLサーバーがlatin1の場合、これは問題を引き起こす可能性がありますか?

MySQLは、提供するコンテンツの翻訳をUTF8として処理できますが、それをlatin1として保存できますか?UTF8はlatin1のスーパーセットであるため、それが可能だとは思いません。私のウェブホスティングサポートは48時間以内に返信していません。彼らには難しすぎるかもしれません。

4

6 に答える 6

20

テーブルの文字セットがコンテンツと同じである場合は、 を使用してみてくださいmysql_set_charset('UTF8', $link_identifier)。MySQL は、より一般的な UTF-8 エンコーディングではUTF8なく、UTF-8 エンコーディングを指定するために使用することに注意してください。UTF-8

同様の質問に対する私の他の回答も確認してください。

于 2011-10-25T12:59:54.333 に答える
5

これは確かにエンコーディングの問題です。データベースとWebサイトで異なるエンコーディングがあり、この事実が問題の原因です。また、そのコマンドを実行した場合は、UTF-8でそれらの文字を変換するために、テーブルに既に存在するレコードを変更する必要があります。

更新:最後のコメントに基づくと、問題の核心は、異なるエンコーディングを使用するデータベースとデータソース(CSVファイル)があることです。したがって、データベースをUTF-8に変換できます。または、少なくとも、CSVにあるデータを取得するときに、それらをUTF-8からlatin1に変換する必要があります。

この記事に従って変換を行うことができます:

于 2011-10-22T12:02:11.580 に答える
1

エラーは通常、CSV の作成中に発生します。Linux を使用して CSV を TextCSV として保存してみてください。Ubuntu の Libre Office は、エンコーディングを UTF-8 に強制できます。Mac OSでこれを試すのに多くの時間を無駄にしました。Linuxが鍵です。Ubuntuでテストしました。

幸運を

于 2014-06-12T10:18:47.737 に答える