2012-12-19 66 views
1

我已經CSV文件以Unicode進行編碼時,我要麼fgetcsv或fgets和嘗試使用數字串在PHP整數讀它,只有字符串的第一個字符被鑄造成一個數字,即在PHP中,如何將unicode數字字符串轉換爲數字正確?

$str='2012'; 
$num=$str + 0; OR $num=(int)$str; 
echo $num; 
results -> 2 

如何正確地轉換這些unicode數字字符串?

我沒有成功地使用PHP中的轉換函數從unicode到其他字符集!

我知道的唯一方法是使用簡單的文本編輯器,如記事本或記事本++,並將文件格式轉換爲ANSI csv。

感謝您的幫助。

+3

「Unicode」不是一種編碼。微軟稱之爲「Unicode」的實際上是UTF-16LE。 –

+0

你使用的是什麼Unicode的風格?在UTF-8中,這應該是可行的。無論哪種方式,轉換爲ASCII,它肯定會工作。 – DaveRandom

回答

2

將其轉換爲其他編碼,如UTF-8。

$str = mb_convert_encoding($str, "UTF-8", "UTF-16LE"); 

您的字符串實際上是這樣的(手動構造UTF-16LE):

$str = "2\x000\x001\x002\x00"; 

所以PHP讀取第一個2,然後看到NUL這不是一個數字,你會得到2

順便說一下,LE BOM不在這裏處理(\xFF\xFE)所以顯示您的完整代碼,我會看到。

+0

謝謝Esailija, 我可以將所有文件內容讀入一個字符串,並將其從UTF-16LE轉換爲UTF-8,然後將其寫回。 然後使用fgets一次讀取一行csv文件,除了在第一行的開始處還有一個額外的字符,我只在第一行使用substr刪除它。再次感謝。 – Mehrdad

+0

@Mehrdad如果你打算這樣做,如果文件有BOM,則使用'UTF-16'。不幸的是,'UTF-16LE'不能吃BOM,所以它將在開始時生成的文件中。 – Esailija

+0

我正在使用這段代碼,它正常工作: $ filestr = file_get_contents($ path); $ filestr = mb_convert_encoding($ filestr,'ASCII','UTF-16LE'); file_put_contents($ path,substr($ filestr,1)); – Mehrdad

相關問題