スレッド表示 | フラット表示〕 全トピック 920 件中 142 番目 次≫ ≪前

CSVとエンコード

created: 2007-02-05 18:15 | modified: 2007-02-09 10:41 | reply: 5

[3570] CSVとエンコード

user: シュン | created: 2007-02-05 18:15
はじめまして、
PHPエンコードについて質問させてください。

OS:Windows XP
DB:postgres8.0
CSVファイルをアップロード時、
こうしていますが。
<?php
$file = "xxx.csv";
$fp_read = fopen ( $file , 'r' );
fgets($fp_read,4096);
while( !feof( $fp_read ) )
{
$one_line_data = fgets($fp_read, 4096);
$data_array = split(",",$one_line_data);
$data_count = count($data_array);
for( $i = 0; $i < $data_count; $i++ )
{
//順番を設定しないと、誤認識が発生します、
ある漢字をCSVファイルに入力すると、
カンマは区別できなくなります。
mb_detect_order('ASCII,JIS,SJIS,EUC-JP,UTF-8');
$temp = $data_array[$i];
$code = mb_detect_encoding($data_array[$i]);
$data_array[$i] = mb_convert_encoding($data_array[$i],"EUC-JP","$code");
}
}
?>
SJISエンコードのある漢字をCSVファイルに入力すると、
可笑しい転換(SJIS→EUC-JP)が発生します。
例え:纊、褜などの漢字は空白になります。
これは何か解決方法がありませんでしょうか。
よろしければ、教えていただけないでしょうか。
SJISのテーブルです(ED行目から発生)。
http://hp.vector.co.jp/authors/VA039433/shift_jis-table.html
reply: 3571 返信 編集 削除

[3571] 機種依存文字

user: YOSHI | created: 2007-02-06 08:01
IBM拡張 NEC特殊文字あたりでぐぐれば幸せになれるかも知れません。
いわゆる[機種依存文字]です。

mb_convert_encoding が対応しているのかどうか詳しく知らないので、この辺りの文字コードはスキップした方が良いと思います。
Parent: 3570  reply: 3572 返信 編集 削除

[3572] 仕様であるので、困っています。

user: シュン | created: 2007-02-06 12:13
YOSHIさん、ご返事ありがとうございました。
この問題はお客様が発見しましたので、
直せなければ、使用をやめると言われたんです。

CSVから読み込むのはSJISに認識しているんですが、
SJIS→EUC-JPエンコードするとき、おかしい転換が
発生するらしいです。
SJIS→EUC-JPのエンコード、具体的にどうやって
いるでしょうか。この問題を解決できる可能性は
ありませんでしょうか。
Parent: 3571  reply: 3573 返信 編集 削除

[3573] eucJP-win, SJIS-win

user: ゆうじ | created: 2007-02-06 13:45
PHPが扱う文字セットには、
EUC-JP、SJIS 以外にこんなのもあります。

eucJP-win
SJIS-win

機種依存文字がどのように扱われてるか
具体的には知りませんけどmb_detect_orderにこれを
加えてみてはいかがでしょうか。

mb_detect_order('ASCII,JIS,SJIS-win,SJIS,eucJP-win,EUC-JP,UTF-8');


もし、SJIS-win → EUC-JP で機種依存文字が失われるならば
内部エンコードを eucJP-win にすることも検討してみてください。
Parent: 3572  reply: 3574 返信 編集 削除

[3574] もう諦めた

user: シュン | created: 2007-02-07 13:17
ゆうじさん、ご返事ありがとうございました。

EUCJP-win、SJIS-winのことは知っていますよ、
mb_detect_orderの順番はいろいろの組み上げがしたんですから。でも、やはり駄目でした。
いろんな資料を調べて、いろんな方法を試した上に、
駄目でした。残念だけど、この問題を続けるのは時間の無駄です、もう諦めます。これからお客様に説明して行きます、何とかするからさ。

今までの皆様、真にありがとうございました。
Parent: 3573  reply: 3578 返信 編集 削除

[3578] 終わり?

user: YOSHI | created: 2007-02-09 10:41
もう決着したかもしれないし、お仕事のようなので放置かと思いましたが、
問題点が明確なので作れば良いんです。
このへんのことは役に立ちそうなので作ってみました。
文字コードテーブルを作って一括変換します。

// chr.php 各文字コードHEX(Shft_JIS,EUC-JP, UTF8-一律に変換できないのでバイナリエディタで作りました)
// hp.vector.co.jp/authors/VA039433/shift_jis-table.html これからコピペしたので機種依存文字の各区をきちっと取った訳じゃありません
// 1時間ほどのやっつけなのでデータは保証の外、ちゃんとしたのを作ってください。
include 'chr.php';
$data = file_get_contents('shift_jis-table.txt');
// Shft_JISからEUC-JP
// $sjishex 配列がpreg対応じゃないのでereg使ってます。($dataの制御コードを抜く処理とか必要です)
$out = ereg_replace($sjishex, $eucjihex, $data);
echo '<pre>';
var_dump($out);
echo '</pre>';
exit;

chr.php,shift_jis-table.txt(Shft_JIS)は、
以下に置いておきます。
http://wing-cart.com/chr.zip
Parent: 3574  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 142 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑