Обнаружьте перепутанную кодировку в PHP и сделайте все Windows 1252Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Обнаружьте перепутанную кодировку в PHP и сделайте все Windows 1252

Сообщение Anonymous »

У меня есть файл CSV со смешанными закодированными строками:

Код: Выделить всё

1956;Mathé Altéry;Le Temps Perdu
1963;Alain Barrière;Elle était si jolie
2024;Gérard truc;Mon éden
2024;GÃ¥te;Ulveham
2023;Gergő Rácz;Zé Szabó
2210;Anna Mjöll;Sjúbídú
2200;Ovidijus Vyšniauskas;Lopšinė mylimai
Некоторые акценты во французских именах либо закодированы UTF8 (é ; è ), либо закодированы в виде обычного текста ('é' ASCII ?). Кроме того, некоторые символы ('ő') отсутствуют в UTF8, но существуют в Windows-1252.
Я преобразовал все из UTF8 в Windows-1252:

Код: Выделить всё

mb_convert_encoding($text, 'Windows-1252','UTF-8');
который работает просто великолепно, .. за исключением французских акцентов, которые все распознаются как UTF8.
Вот пример кода:

Код: Выделить всё

$csv = array("1956;Mathé Altéry;Le Temps Perdu",
"1963;Alain Barrière;Elle était si jolie",
"2024;Gérard truc;Mon éden",
"2024;GÃ¥te;Ulveham",
"2023;Gergő Rácz;Zé Szabó",
"2210;Anna Mjöll;Sjúbídú",
"2200;Ovidijus Vyšniauskas;Lopšinė mylimai");

foreach ($csv as $row) {
echo "row=$row\n";
$row_values = explode(';', $row);

foreach ($row_values as $value) {
echo sprintf("value=%-30s encoding=%-10s W1252=%-20s\n",
$value,
mb_detect_encoding($value),
mb_convert_encoding($value, 'Windows-1252' ,'UTF-8'));
}

echo "\n";
}

# php ./encodings.php
row=1956;Mathé Altéry;Le Temps Perdu
value=1956                           encoding=ASCII      W1252=1956
value=Mathé Altéry             encoding=UTF-8      W1252=Mathé Altéry
value=Le Temps Perdu                 encoding=ASCII      W1252=Le Temps Perdu

row=1963;Alain Barrière;Elle était si jolie
value=1963                           encoding=ASCII      W1252=1963
value=Alain Barrière              encoding=UTF-8      W1252=Alain Barrière
value=Elle était si jolie         encoding=UTF-8      W1252=Elle était si jolie

row=2024;Gérard truc;Mon éden
value=2024                           encoding=ASCII      W1252=2024
value=Gérard truc                   encoding=UTF-8      W1252=G▒rard truc
value=Mon éden                      encoding=UTF-8      W1252=Mon ▒den

row=2024;GÃ¥te;Ulveham
value=2024                           encoding=ASCII      W1252=2024
value=GÃ¥te                        encoding=UTF-8      W1252=Gåte
value=Ulveham                        encoding=ASCII      W1252=Ulveham

row=2023;Gergő Rácz;Zé Szabó
value=2023                           encoding=ASCII      W1252=2023
value=GergÅ‘ Rácz              encoding=UTF-8      W1252=Gergő Rácz
value=Zé Szabó                 encoding=UTF-8      W1252=Zé Szabó

row=2210;Anna Mjöll;Sjúbídú
value=2210                           encoding=ASCII      W1252=2210
value=Anna Mjöll                  encoding=UTF-8      W1252=Anna Mjöll
value=Sjúbídú               encoding=UTF-8      W1252=Sjúbídú

row=2200;Ovidijus Vyšniauskas;Lopšinė mylimai
value=2200                           encoding=ASCII      W1252=2200
value=Ovidijus VyÅ¡niauskas        encoding=UTF-8      W1252=Ovidijus Vyšniauskas
value=LopÅ¡inÄ— mylimai         encoding=UTF-8      W1252=Lopšinė mylimai

Вы можете видеть, что значения с французским акцентом распознаются как UTF-8, и при их преобразовании в W1252 добавляются странные символы, означающие неправильное преобразование. Я знаю, что W1252 не подходит для интернационализации, однако преобразование «LopÅ¡inÄ— mylimai» в UTF8 не дает правильного результата, это дает только W1252.
Теперь я не могу понять как определить, какие строки необходимо кодировать, а какие нет. Кажется, mb_detect_encoding не возвращает надежных результатов.
Есть идеи?
Всем большое спасибо!!!

Подробнее здесь: https://stackoverflow.com/questions/787 ... ndows-1252
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»