Греческие и специальные символы отображаются как моджибаке - как расшифровать?

Я пытаюсь понять, как декодировать некоторые поврежденные символы, которые у меня есть в электронной таблице. Есть список названий веб-сайтов: некоторые на английском, некоторые на греческом, некоторые на других языках. Например, греческая фраза ΕΛΛΗΝΙΚΑ ΝΕΑ ΤΩΡΑ отображается как ŒïŒõŒõŒóŒùŒôŒöŒë ŒùŒïŒë Œ§Œ©Œ°Œë. Итак, с пробелами все в порядке, но с буквами все пошло не так.

Я заметил, что буквы были преобразованы в пары символов:

  • Ε - Œï
  • Λ - Œõ

И так далее. Так что это почти всегда Œ, а затем какой-то другой символ после него.

Я пошел дальше, удалил повторяющуюся букву и проверил разницу в ASCII-кодах актуальной фразы и того, что осталось от испорченной фразы: ord('ï') - ord('Ε') и так далее. Разница почти всегда одна и та же: `

678
678
678
676
676
677
676
678
0 (this is a whitespace)
676
678
678
0 (this is a whitespace)
765
768
753
678

Я вручную расшифровал некоторые другие буквы из других заголовков:

Greek

Œë  Α
Œî  Δ
Œï  Ε
Œõ  Λ
Œó  Η
Œô  Ι
Œö  Κ
Œù  Ν
Œ°  Ρ
Œ§  Τ
Œ©  Ω
Œµ  ε
Œª  λ
œÑ  τ
ŒØ  ί
Œø  ο
œÑ  τ
œâ  ω
ŒΩ  ν

Symbols

‚Äò ‘
‚Äô ’
‚Ķ …
‚Ć †
‚Äú “

Other

√©  é

Хорошо, что у меня есть перевод этой фразы, но есть пара других, для которых у меня нет перевода. Я был бы рад увидеть любой совет, потому что поиск в StackOverflow не показал мне ничего связанного.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это проблема кодировки символов. Судя по всему, строка имеет кодировку Mac OS Roman (догадалась по этому сайту). Код IANA для этой кодировки — macintosh, а номер кодовой страницы Windows — 100000.

Вот функция Python, которая декодирует macintosh в utf-8 строки:

def macToUtf8(s):
  return bytes(s, 'macintosh').decode('utf-8')

print(macToUtf8('ΕΛΛΗΝΙΚΑ ΝΕΑ ΤΩΡΑ'))
# outputs: ΕΛΛΗΝΙΚΑ ΝΕΑ ΤΩΡΑ

Я предполагаю, что ваша электронная таблица была сохранена на компьютере Mac или, возможно, сохранена с использованием какой-либо настройки на основе Macintosh.

Смотрите также этот выпуск: Какую кодировку использует MAC Excel?

Большое спасибо! Электронная таблица представляет собой документ Google Spreadsheets, поэтому он размещен в Интернете, я не уверен, как он был сохранен. Возможно, это было импортировано из файла. Спасибо.

pgndck 11.11.2022 20:15

@pgndck А, импорт Google Sheet с Mac звучит правдоподобно. Подходит ли решение Python? Или было бы лучше, если бы это был сценарий приложения или что-то еще?

General Grievance 15.11.2022 17:51

Другие вопросы по теме