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:
  1. if(!function_exists('unicode_encode')){
  2. function unicode_encode($uni,$ret16 = false, $msb = false)
  3. {
  4. foreach($uni as $unichr)
  5. {
  6. if(!$ret16)
  7. {
  8. if (($unichr >= 0x00) && ($unichr <= 0x7F))
  9. $output .= chr($unicode_char);
  10.  
  11. else if (($unichr >= 0x80) && ($unichr <= 0x7FF))
  12. {
  13. $out .= chr(0xC0 + ($unichr / 0x40));
  14. $out .= chr(0x80 + ($unichr & 0x3F));
  15. }
  16.  
  17. else if (($unichr >= 0x800) && ($unichr <= 0xFFFF))
  18. {
  19. $out .= chr(0xE0 + ($unichr/0x1000));
  20. $out .= chr(0x80 + (($unichr/0x40) & 0x3F));
  21. $out .= chr(0x80 + ($unichr & 0x3F));
  22. }
  23.  
  24. else if (($unichr >= 0x10000) && ($unichr <= 0x1FFFFF))
  25. {
  26. $out .= chr(0xF0 + ($unichr/0x40000));
  27. $out .= chr(0x80 + (($unichr/0x1000) & 0x3F));
  28. $out .= chr(0x80 + (($unichr/0x40) & 0x3F));
  29. $out .= chr(0x80 + ($unichr & 0x3F));
  30. }
  31.  
  32. else if (($unichr >= 0x200000) && ($unichr <= 0x3FFFFFF))
  33. {
  34. $out .= chr(0xF8 + ($unichr/0x1000000));
  35. $out .= chr(0x80 + (($unichr/0x40000) & 0x3F));
  36. $out .= chr(0x80 + (($unichr/0x1000) & 0x3F));
  37. $out .= chr(0x80 + (($unichr/0x40) & 0x3F));
  38. $out .= chr(0x80 + ($unichr & 0x3F));
  39. }
  40.  
  41. else if (($unichr >= 0x4000000) && ($unichr <= 0x7FFFFFFF))
  42. {
  43. $out .= chr(0xFC + ($unichr/0x40000000));
  44. $out .= chr(0x80 + (($unichr/0x1000000) & 0x3F));
  45. $out .= chr(0x80 + (($unichr/0x40000) & 0x3F));
  46. $out .= chr(0x80 + (($unichr/0x1000) & 0x3F));
  47. $out .= chr(0x80 + (($unichr/0x40) & 0x3F));
  48. $out .= chr(0x80 + ($unichr & 0x3F));
  49. }
  50. }
  51.  
  52. else
  53. {
  54. if((($unichr >= 0x0000) && ($unichr <= 0xD7FF)) || (($unichr >= 0xE000) && ($unichr <= 0xFFFF)))
  55. {
  56. if($msb) $out .= chr($unichr / 0x100).chr($unichr % 0x100);
  57. else $out .= chr($unichr % 0x100).chr($unichr / 0x100);
  58. }
  59.  
  60. else if(($unichr >= 0x10000) && ($unichr <= 0x10FFFF))
  61. {
  62. $high = (($unichr - 0x10000) / 0x400) + 0xD800;
  63. $low = (($unichr - 0x10000) % 0x400) + 0xDC00;
  64.  
  65. if($msb)
  66. {
  67. $out .= chr($high / 0x100).chr($high % 0x100);
  68. $out .= chr($low / 0x100 ).chr($low % 0x100 );
  69. }
  70.  
  71. else
  72. {
  73. $out .= chr($high % 0x100).chr($high / 0x100);
  74. $out .= chr($low % 0x100).chr($low / 0x100);
  75. }
  76. }
  77. }
  78. }
  79.  
  80. return $out;
  81. }}


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.