2012-12-10 132 views
7

我從郵件服務器獲取郵件並將郵件轉換爲UTF-8字符集並將其保存在數據庫中。要轉換我使用mb_convert_encoding的字符集,但無法轉換gb2312ks_c_5601-1987。在谷歌搜索我發現,而不是gb2312我可以使用CP936ks_c_5601-1987使用CP949如何正常化編碼名稱,如ks_c_5601-1987到CP949?

通過上述方法,它將意味着在我的代碼中維護一個單獨的字符集映射列表。 有沒有一種方法可以將編碼的名稱標準化爲由PHP內部支持的名稱,因此不需要在本地維護任何地圖?

+0

我建議喲你推廣這個問題,要求以某種方式將編碼名稱規範化爲PHP內部支持的名稱。這將是一個有用的,通常適用的問題。 – deceze

+0

感謝很好的建議編輯了這個問題 –

+0

'iconv'識別'ks_c_5601-1987'但不能轉換。 'mb_convert_encoding'完全不支持'949'或'ks_c_5601-1987'。 'iconv'識別並可以轉換'gb2312'。 – Esailija

回答

2

根據list of supported character encodings只有少量的代碼頁明確列出的編碼。鑑於這些案例數量很少 - 雖然不是按照要求內置規範化 - 但映射列表可能不太適合。

相關的人似乎是以下(右邊的小寫名稱,您需要從轉換名):

  • CP932 SHIFT_JIS
  • CP51932 EUC_JP
  • CP50220異2022-JP
  • CP50221 csISO220JP
  • CP50222 ISO-2022-JP
  • CP936 GB2312
  • CP950中文

以下也是由代碼頁中列出的PHP文件上,但似乎已經適合同義詞:

  • CP866(IBM866)
  • UHC(CP949)
  • 的Windows-1251(CP1251)
  • 的Windows 1252(CP1252)