2012-12-10 7 views
7

Sto recuperando e-mail da un server di posta e convertendo il messaggio in set di caratteri UTF-8 e salvandolo in DB. Per convertire il set di caratteri sto usando mb_convert_encoding ma non riesce a convertire gb2312 e ks_c_5601-1987. Su Google ho trovato che invece di gb2312 posso usare CP936 e per ks_c_5601-1987 utilizzare CP949.Come normalizzare i nomi di codifica, come ks_c_5601-1987 in CP949?

Passare all'approccio precedente significherebbe mantenere un elenco separato di associazioni di charset nel mio codice. C'è un modo per normalizzare i nomi delle codifiche ai nomi internamente supportati da PHP, eliminando così la necessità di mantenere una mappa localmente?

+0

io suggerirei yo generalizzare la domanda per chiedere un modo per normalizzare i nomi delle codifiche ai nomi internamente supportati da PHP. Sarebbe una domanda utile e generalmente applicabile. – deceze

+0

Grazie bel suggerimento modificato la domanda –

+0

'iconv' riconosce' ks_c_5601-1987' ma non può convertire. 'mb_convert_encoding' non supporta affatto' 949' o 'ks_c_5601-1987'. 'iconv' riconosce e può comunque convertire' gb2312'. – Esailija

risposta

2

Secondo lo list of supported character encodings c'è solo un piccolo numero di codifiche elencate esplicitamente dalla tabella codici. Dato il numero limitato di questi casi - pur non essendo una normalizzazione incorporata come richiesto - un elenco di mappature potrebbe non essere troppo inappropriato.

Quelli rilevanti sembrano essere il seguente (il nome minuscolo sulla destra è il nome sarà necessario convertire da):

  • CP932 Shift_JIS
  • CP51932 EUC_JP
  • CP50220 iso- 2022-jp
  • CP50221 csISO220JP
  • CP50222 iso-2022-jp
  • CP936 GB2312
  • CP950 big5

Di seguito sono elencati anche dal codice pagine sulla documentazione di PHP, ma sembrano avere i sinonimi adeguati già:

  • CP866 (IBM866)
  • UHC (CP949)
  • di Windows-1251 (CP1251)
  • di Windows-1252 (CP1252)
Problemi correlati