Mam następujący problem:
Próbuje zapisać plik z koreańską nazwą. Przykład:
Cytat
여_00.ftr
Otrzymuje:
Cytat
ě—¬_00.ftr
Prawdopodobnie chodzi o prze konwertowanie nazwy na akceptowane przez system kodowanie.
Domyśliłem się że docelowym kodowaniem ma być UTF-8 ponieważ plik w którym trzymam nazwy wszystkich plików jest kodowany właśnie UTF-8 i wszystkie nazwy są zapisane prawidłowo.
Napisałem sobie funkcję która konwertuje Unicode do UTF-8 ale wynik jest identyczny.
Oto kod:
if(!function_exists('unicode_encode')){ function unicode_encode($uni,$ret16 = false, $msb = false) { foreach($uni as $unichr) { if(!$ret16) { if (($unichr >= 0x00) && ($unichr <= 0x7F)) $output .= chr($unicode_char); else if (($unichr >= 0x80) && ($unichr <= 0x7FF)) { $out .= chr(0xC0 + ($unichr / 0x40)); $out .= chr(0x80 + ($unichr & 0x3F)); } else if (($unichr >= 0x800) && ($unichr <= 0xFFFF)) { $out .= chr(0xE0 + ($unichr/0x1000)); $out .= chr(0x80 + (($unichr/0x40) & 0x3F)); $out .= chr(0x80 + ($unichr & 0x3F)); } else if (($unichr >= 0x10000) && ($unichr <= 0x1FFFFF)) { $out .= chr(0xF0 + ($unichr/0x40000)); $out .= chr(0x80 + (($unichr/0x1000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x40) & 0x3F)); $out .= chr(0x80 + ($unichr & 0x3F)); } else if (($unichr >= 0x200000) && ($unichr <= 0x3FFFFFF)) { $out .= chr(0xF8 + ($unichr/0x1000000)); $out .= chr(0x80 + (($unichr/0x40000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x1000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x40) & 0x3F)); $out .= chr(0x80 + ($unichr & 0x3F)); } else if (($unichr >= 0x4000000) && ($unichr <= 0x7FFFFFFF)) { $out .= chr(0xFC + ($unichr/0x40000000)); $out .= chr(0x80 + (($unichr/0x1000000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x40000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x1000) & 0x3F)); $out .= chr(0x80 + (($unichr/0x40) & 0x3F)); $out .= chr(0x80 + ($unichr & 0x3F)); } } else { if((($unichr >= 0x0000) && ($unichr <= 0xD7FF)) || (($unichr >= 0xE000) && ($unichr <= 0xFFFF))) { if($msb) $out .= chr($unichr / 0x100).chr($unichr % 0x100); else $out .= chr($unichr % 0x100).chr($unichr / 0x100); } else if(($unichr >= 0x10000) && ($unichr <= 0x10FFFF)) { $high = (($unichr - 0x10000) / 0x400) + 0xD800; $low = (($unichr - 0x10000) % 0x400) + 0xDC00; if($msb) { $out .= chr($high / 0x100).chr($high % 0x100); $out .= chr($low / 0x100 ).chr($low % 0x100 ); } else { $out .= chr($high % 0x100).chr($high / 0x100); $out .= chr($low % 0x100).chr($low / 0x100); } } } } return $out; }}
Jeśli chodzi o system operacyjny to kod nie będzie wykonywany na innym niż Windows Vista.
Z tego co mi wiadomo obsługuje składnie koreańską niezależnie od wersji językowej narzuconej przez usera.
Z góry dzięki i pozdrawiam.