Witam. (To mój pierwszy post tutaj, proszę o wyrozumiałość.)
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.
Ten post edytował whiteDancer 12.12.2009, 18:38:02