Проблемы при перекодировании из UTF-8

v7

Новичок
Проблемы при перекодировании из UTF-8

Есть xml-файл (экспорт базы windows-программы).
Данные о кодировке в нем не указаны (т.е. UTF-8)
При попытке перекодировать в Windows-1251 часть текстов перекодируются нормально, а некоторые только немного изменяются.
Перекодировал по-разному: iconv(), функции из FAQ
Пример исходного текста - "Р_С’Р_ІС‚Р_С•Р_С?Р_С•Р_В±Р_С‘Р_В»Р_С‘"
Получается - "РРІС‚РРРРВ±РёР»и"
Должно быть - "Автомобили"

В чем может быть проблема?

P.S. В примере исходного текста пробелы заменились на подчеркивания.

P.P.S. Для UTF-8 слишком много символов - слово из 10 букв в UTF-8 - 20 символов, а здесь ~ 40 символов. Какое-то двойное перекодирование или другая кодировка?
 

v7

Новичок
Автор оригинала: bkonst
В кодировке исходных данных.
Тема кодировки не раскрыта. :)

Я немного скорректировал вопрос - это какая-то двойная перекодировка? Часть файла нормально раскодируется из UTF-8.
Т.е. возможно, это плохая реализация кодирования в UTF-8 (переводят из 'Windows-1251', хотя текст в 'koi-8r', например). Вопрос остается открытым - как это раскодировать?
 

SiMM

Новичок
Исходный текст выдайте после обработки этой функцией.
PHP:
function hexdump($str){
  return substr(preg_replace('#.#se','sprintf("%02x.",ord("$0"))',$str),0,-1);
}
> это какая-то двойная перекодировка? Часть файла нормально раскодируется из UTF-8.
А вот это Вам, батенька, никто не скажет - ибо телепатов нет, и как попали данные файл, и как они были извлечены оттуда - никому из нас неизвестно.
 

v7

Новичок
Автор оригинала: SiMM
Исходный текст выдайте после обработки этой функцией.
PHP:
function hexdump($str){
  return substr(preg_replace('#.#se','sprintf("%02x.",ord("$0"))',$str),0,-1);
}
d0.a0.d1.92.d0.a0.d0.86.d0.a1.e2.80.9a.d0.a0.d1.95.d0.a0.d1.98.d0.a0.d1.95.d0.a0.c2.b1.d0.a0.d1.91.d0.a0.c2.bb.d0.a0.d1.91
Это - все те же "Автомобили".
Этого достаточно, чтобы понять, что это может быть, или нужен больший кусок текста?

Автор оригинала: SiMM
А вот это Вам, батенька, никто не скажет - ибо телепатов нет, и как попали данные файл, и как они были извлечены оттуда - никому из нас неизвестно.
Попали - кнопка в программе "экспорт в xml", извлечены - в Блокноте. А как закодировано - уже долго и упорно пытаюсь понять. :)
 

SiMM

Новичок
PHP:
$str='d0.a0.d1.92.d0.a0.d0.86.d0.a1.e2.80.9a.d0.a0.d1.95.d0.a0.d1.98.d0.a0.d1.95.d0.a0.c2.b1.d0.a0.d1.91.d0.a0.c2.bb.d0.a0.d1.91';
echo iconv('UTF-8','CP1251',iconv('UTF-8','CP1251',pack('H*',str_replace('.','',$str))));
> Попали - кнопка в программе "экспорт в xml"
Это ни о чём не говорит. Мы же не знаем, что это за программа - может она косячит? Выложили бы НЕБОЛЬШОЙ файл куда-нибудь...
> извлечены - в Блокноте.
... после чего уже можно было сказать, чей это косячёк - блокнота или "экспорта".
 

Trianon

Новичок
PHP:
$r = 'd0a0d192d0a0d086d0a1e2809ad0a0d195d0a0d198d0a0d195d0a0c2b1d0a0d191d0a0c2bbd0a0d191';
  $r1 = iconv('UTF-8', 'Windows-1251', pack('H*', $r));
  $r2 = iconv('UTF-8', 'Windows-1251', $r1);
echo $r2;
Это Автомобили. Но они из 1251 в UTF-8 завёрнуты дважды
Где-то Вы переусердствовали.
 

v7

Новичок
Всем спасибо за помощь!

Осталось немного - определить, что в файле закодировано один раз в UTF-8, а что - дважды (в xml файле встречаются оба формата). Но это уже проще - пример есть в FAQ по Unicode. Еще раз спасибо SiMM.

Автор оригинала: SiMM
Мы же не знаем, что это за программа - может она косячит?
... после чего уже можно было сказать, чей это косячёк - блокнота или "экспорта".
Косяк (или фича) именно программы. Причем сама программа такие файлы читает нормально.
Смотрел файл в нескольких текстовых редакторах (Блокнот, Bred (но довольно старая версия), HomeSite) - везде одинаково.
Сейчас удалось посмотреть небольшой кусок файла (на всем файле зависает) в RJ TextEd (редактор с поддержкой UTF-8), - один раз он перекодирует (до обычного UTF-8), хотя нормальные UTF-8 файлы показывает сразу в читаемом виде.
 
Сверху