
當我將檔案從伺服器 A (Debian 7.4) 複製到伺服器 B (Debian 7.4) 時遇到問題。檔案中的波蘭語特殊字元在伺服器 B(在 mcedit 中)上無法正確顯示。
locale
我在伺服器A 上建立了一個帶有波蘭語特殊LANG=pl_PL.UTF-8
字元LANGUAGE
的LC=ALL
檔案pl_PL.UTF-8
。然後我 tar 文件,並在 Server BI 上使用 wget 命令下載 tarred 文件。在伺服器 BI 解壓縮檔案上,當我查看檔案內容 (mcedit) 時,波蘭語字母顯示不正確。有“鑽石”而不是特殊字元。當我locale
在伺服器 B 上運行時LANG=en_US.UTF-8
。除LANGUAGE
和之外的其他變數LC=ALL
也設定為en_US.UTF-8
。
然後我運行資料庫遷移(php 腳本)並將損壞的資料插入到資料庫中。當我在遷移中添加行時,波蘭語特殊字元將被替換為類似的字串Å›
(波蘭字母ś
被替換為Å›
)。
我在 mcedit 中檢查了伺服器 A 和伺服器 B 上的檔案在兩台伺服器上具有相同的值。 Polsih 字母「ś」在兩台機器上均為 C5 9B(十六進位)。
最糟糕的是,每次出現特殊字元時,我都必須手動檢查並修正資料庫中的錯誤。
也許當我透過 php 遷移腳本編輯資料庫中的列值時,它也會損壞資料庫中的資料。一旦我從表中讀取數據,然後進行操作,然後保存,我的數據也被損壞。
如果我將伺服器 B 上的區域設定更改為pl_PL.UTF-8
其他語言(如德語、捷克語等)中的特殊字元將可以正常工作嗎?如果是字體問題那麼為什麼資料庫遷移也會損壞?我使用 UTF-8 那麼每種語言的每個特殊字元都應該正確顯示嗎?如何正確顯示每種語言的特殊字元以及如何正確執行 php 遷移?
更新 1:
伺服器 Alocale -a
輸出:
C
C.UTF-8
pl_PL.utf8
POSIX
伺服器Blocale -a
輸出:
C
C.UTF-8
en_US.utf8
POSIX
在兩台伺服器上 locale -m 輸出很多字元映射(在兩台機器上似乎相同)
答案1
locale -a
檢查和的輸出locale -m
,確保伺服器 B 安裝了正確的區域設定和字元集,以正確解釋 pl_PL.UTF-8