簡體   English   中英

PHP:使用utf8_encode時,csv中的字符編碼錯誤

[英]PHP: characters wrongly encoded in csv when using utf8_encode

從MySql數據庫提取數據並將其插入CSV文件時,我遇到一個奇怪的問題。 在數據庫中,字段值如下:

K Secure Connection 1 año 1 PC

當我在將其寫入CSV文件之前echo它時,我在終端中得到的與上述相同。

我使用以下代碼將內容寫入CSV文件:

fwrite($this->fileHandle, utf8_encode($lineContent . PHP_EOL));

但是,當我使用LibreOffice Calc打開CSV(並將UTF-8指定為編碼格式)時,將顯示以下內容:

K Secure Connection 1 año 1 PC

我不知道為什么會這樣。 有人可以解釋如何解決嗎?

REM:

SELECT @@character_set_database;

退貨

latin1 

REM 2:

`var_dump($lineContent, bin2hex($lineContent))`

string(39) "Kaspersky Secure Connection 1 año 1 PC"
string(78) "4b6173706572736b792053656375726520436f6e6e656374696f6e20312061c3b16f2031205043"

var_dump顯示該字符串已經以UTF-8編碼。 在其上使用utf8_encode會使它顯示亂碼(該函數嘗試從Latin-1 轉換為UTF-8)。 因此,您實際上是在將UTF-8編碼的“año”寫入文件,然后由LibreOffice“正確”提取。

只需不要utf8_encode

我會嘗試使用其他編輯器打開csv文件,只是為了確保te問題不在辦公室...

如果內容已經采用UTF-8格式,則可能會對其進行雙重編碼。

我還更喜歡不使用UTF-8,因此我已經從數據庫中以UTF-8格式獲取數據,不需要進行任何轉換。 為此,我在打開SQL連接后立即運行此查詢:

"set names 'utf8'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM