3

PHPを使用して解析してデータベースに挿入する必要があるクライアントから提供されたCSVファイルがあります。

データをDBに挿入する前に、UTF-8に変換したいのですが、方法がわからないようです。

これは私がファイルエンコーディングを検出しようとして得たものです:

$ enca -d -L zh ./artigos.txt 
    ./artigos.txt: Universal character set 2 bytes; UCS-2; BMP
    CRLF line terminators
    Byte order reversed in pairs (1,2 -> 2,1)

iconv関数を使用してみましたが、変換が混乱し、元の文字とは異なる文字で結果が表示されます。

ファイルの最初の行(base64でエンコード):

IgAwADMAMQAxADkAIgAsACIANwAzADEAMwA0ADYAMgA2ADQAMAAwADEANQAiACwAIgBBAGcAcgBhAGYAYQBkAG8AcgAgAFIAYQBwAGkAZAAgADkAIABIAGUAYQB2AHkAIABEAHUAdAB5ACIALAAiAEEAZwByAGEAZgBvACAAOQAvADgALAAgADkALwAxADAALAAgADkALwAxADIALAAgADkALwAxADQAIgAsACIAMQAxADAAZgBsAHMAIgAsACIAIgAsACIAIgAsACIAIgAsACIAMAAzADEAMQA5AC4AagBwAGcAIgAsACIAIgAsACIAMQAsADIAMAAiACwAIgA1ADkALAA5ADAAIgAsACIAMgAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIARgBhAGwAcwBlACIADQAK
4

3 に答える 3

8

Microsoft Excel CSV は通常、リトル エンディアンでエンコードされています (見つけるのに時間がかかりました)。または同様の機能でそれらを使用する場合fgetcsvは、最初にファイルを UTF-8 に変換する必要があります。

私は次のことを行います:

$str = file_get_contents($file);
$str = mb_convert_encoding($str, 'UTF-8', 'UCS-2LE'); 
file_put_contents("converted_".$file, $str);
于 2016-09-02T12:43:02.213 に答える
3

非ASCII文字を含めていませんが、これは機能しているようです(リトルエンディアン)

$s='IgAwADMAMQAxADkAIgAsACIANwAzADEAMwA0ADYAMgA2ADQAMAAwADEANQAiACwAIgBBAGcAcgBhAGYAYQBkAG8AcgAgAFIAYQBwAGkAZAAgADkAIABIAGUAYQB2AHkAIABEAHUAdAB5ACIALAAiAEEAZwByAGEAZgBvACAAOQAvADgALAAgADkALwAxADAALAAgADkALwAxADIALAAgADkALwAxADQAIgAsACIAMQAxADAAZgBsAHMAIgAsACIAIgAsACIAIgAsACIAIgAsACIAMAAzADEAMQA5AC4AagBwAGcAIgAsACIAIgAsACIAMQAsADIAMAAiACwAIgA1ADkALAA5ADAAIgAsACIAMgAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIAMAAiACwAIgAwACIALAAiADAAIgAsACIARgBhAGwAcwBlACIADQAK';
$t=base64_decode($s);
echo iconv('UCS-2LE', 'UTF-8', substr($t, 0, -1));//last byte was invalid
于 2012-06-08T05:07:14.497 に答える
0

パイソン:

エンコードする方法の 1 つは、

テキスト -> utf-16-be -> 16 進数

元に戻す

16 進数から 2 進数へ、次に utf-16-be からテキストへ

注 : ucs-2be は非推奨であり、utf-16-be に移動します

デコーダ

import binascii
code = '098 ... '
decoded_text = binascii.unhexlify(code).decode('utf-16-be')
于 2018-04-16T11:10:38.847 に答える