2012-12-10 13 views
7

Pobieranie wiadomości e-mail z serwera poczty i przekształcanie wiadomości w zestaw znaków UTF-8 i zapisywanie jej w DB. Aby przekonwertować zestaw znaków używam mb_convert_encoding, ale nie można przekonwertować gb2312 i ks_c_5601-1987. Podczas korzystania z google znalazłem, że zamiast gb2312 mogę używać CP936 i ks_c_5601-1987 używać CP949.Jak znormalizować nazwy kodowania, takie jak ks_c_5601-1987 do CP949?

Przechodząc przez powyższe podejście, oznaczałoby to utrzymanie oddzielnej listy odwzorowań zestawu znaków w moim kodzie. Czy istnieje sposób na znormalizowanie nazw kodowań do nazw obsługiwanych wewnętrznie przez PHP, eliminując potrzebę lokalnej konserwacji?

+0

Sugeruję yo u generalizujesz pytanie, aby poprosić o jakiś sposób na znormalizowanie nazw kodowań do nazw obsługiwanych wewnętrznie przez PHP. Byłoby to użyteczne, ogólnie obowiązujące pytanie. – deceze

+0

Dzięki miłej sugestii zredagowano pytanie: –

+0

'iconv' rozpoznaje' ks_c_5601-1987' ale nie może dokonać konwersji. 'mb_convert_encoding' w ogóle nie obsługuje' 949' ani 'ks_c_5601-1987'. 'iconv' rozpoznaje i może konwertować' gb2312' chociaż. – Esailija

Odpowiedz

2

Zgodnie z list of supported character encodings tylko niewielka liczba kodowań jest wyraźnie wyszczególniona na stronie kodowej. Biorąc pod uwagę niewielką liczbę takich przypadków - chociaż nie jest to normalizacja według wymagań - lista mapowań może nie być zbyt nieodpowiednia.

Odpowiednie te wydają się być następujący (małymi literami nazwa po prawej stronie jest nazwa trzeba przekonwertować z):

  • CP932 Shift_JIS
  • CP51932 euc_jp
  • CP50220 izo- 2022-JP
  • CP50221 csISO220JP
  • CP50222 ISO-2022-JP
  • CP936 GB2312
  • CP950 Big5

osoby są również wymienione kodem stron na dokumentacji PHP lecz wydaje się mieć odpowiednie synonimy już następujące:

  • CP866 (IBM866)
  • UHC (CP949)
  • Windows 1251 (CP1251)
  • Windows 1252 (CP1252)
Powiązane problemy