ホームページ >バックエンド開発 >PHPチュートリアル >GB2312からUTF-8にデータを変換する方法

GB2312からUTF-8にデータを変換する方法

WBOY
WBOYオリジナル
2016-06-23 13:59:032047ブラウズ

iconv 関数と mb_convert_encoding 関数の両方を試してみましたが、結果は同じでした。単語が欠落しているか、直接エラーが発生します。解決方法を教えてください。議論 (解決済み) Scheme)

iconv("GB2312","UTF-8//IGNORE",$data)
元のデータは GB2312 でエンコードされていますか?

はい、そうです、ANSI です。 format

はい、そうです、ANSI 形式です

ファイル ページのエンコーディングは何ですか?コードを投稿して見てみてはいかがでしょうか?

これは、scv ファイルのインポート関数を作成しています。それをメモ帳で開くと、保存エンコーディングが ANSI であることがわかります。 fgetcvs がループするのは何をしても異常です。メモ帳を使用する前は、utf-8 として保存するインポート機能は OK だったので、ページ エンコーディングは utf-8 である必要があります


GB2312 は GBK のサブセットです

UCS-2 は GBK のバリアントです

UCS-2 と UTF-8
の間には単純な置き換え操作があります

そのため、GB2312 または GBK から UTF-8 に変換するときにデータの損失はありません

逆に、損失の可能性があります

ANSI では問題を説明できません
ANSI は一般に国家規格を指します、コンピュータを指します オペレーティング システムのデフォルトの文字セットです (手動で変更できます)
Windows を例に挙げると、簡体字中国語システムは GBK で、繁体字中国語システムは BIG5 です


助けていただけますか?私が入力した cvs ファイルの地域情報が湖北省、湖南省、広東省であれば、iconv('GB2312','UTF-8',$str) を通じて「省」文字に変換されます。山東省または山西省は完全に翻訳されており、四川省は「親指」「ㄊ」と翻訳されていますが、これはなぜですか? 2 日間止まっています

ファイルをクラウド ディスクに保存できますか?
または

echobase64_encode(file_get_contents('your csv file name', false, null, 0, 1000));

結果を投稿します

結果は次のようになります:


次に、 echo iconv('GBK' , 'UTF-8',file_get_contents($file['tmp_name']));return false;

取得したデータはすべて utf8 データですが、残念ながらこれは私が望むものではありません


1. Base64 データを投稿します
2. 教えてください何をするつもりですか

コードを投稿して見てください ニーズを簡単に説明してください

seDC6yxDUk2x4MLrLMP7s8YsvPKzxizQ0NK1LCK/zbunwODQzaOosOzKwrSmOjEs1+7W1b/Nu6c6Miy0+sDtycw6M6OpIiwiveHL4 0M2jqNfu1tW/zbunOjEsveHL47/Nu6c6MizP+srbv827pzozo6kiLMv5yvS/zbunLMv51 NrH+NPyLMGqz7XIyyzBqs+1yMu157uwLLXY1rcssbjXoiyxuNeiMiyxuNeiMw0KLGZnZ2csc2 RmZ2Zka Ggsc2FkLM28yum53dTEwMDK0iwzLDAsZmRnZGZnLMm9tqvKoSxhc2RmZywxMzgwMDEEzODAwMCxmZGhmZ2hmLGFhYSxiYmIsY2NjDQo=
それが私が望むすべてですfgetcsv 関数を使用してレコードの各行をループして配列を形成し、データベースに保存します。ただし、CVS ファイルには多くのフィールドがあり、一部は入力できるため、file_get_contents を直接使用する場合はこの効果を実現するのは困難です。そしていくつかは必須です。だから私はとても混乱しています

エンコーディングの変換はそれと何の関係があるのですか

$fp = fopen('你的csv文件名', 'r');while($row = fgetcsv($fp)) {  $res[] = $row;}print_r($res);


モデレータさん、今更ながら問題解決に協力してくれてありがとうございます。 cvs ファイルのエンコーディングは gb2312 です。データベースのエンコーディングは utf8 であるため、配列にロードする前に、ここで取得したデータをライブラリ内のデータと比較して、必要なデータを取得する必要があります。さらに、CVS ファイル内の多くのフィールドは中国語文字であるため、問題は、file_get_contents の外でトランスコードするループに入ることができますが、1 つずつトランスコードすることはできません。

トランスコードする必要はありません
比較する前に mysql_query('set names gbk'); を 1 回実行するだけです

モデレーターには別の質問があります。gbk でエンコードされたデータをデータベースに入れるにはどうすればよいですか? 内部のエンコーディングは utf8 です。 fegtcvs の機能なのでしょうか。 内部でトランスコードできない場合は、

gbk データを utf8 テーブルに挿入するだけです。 mysql_query(' set names gbk') を実行するだけです。 ; 以上です

mysql_query(' set names gbk');

このコマンドの機能は、mysql に gbk 文字セットを使用して動作するように通知することです

トランスコーディング作業は mysql 自体によって完了します


モデレーター、ありがとうございます。機能を実現するために fgetcsv の代わりにファイルを変更しましたが

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。