Давным-давно я импортировал компакт-диск с китайской музыкой в iTunes. Названия песен на компакт-диске должны быть в кодировке, отличной от Unicode, поскольку они отображаются в iTunes как строка бессмысленных символов. Например, для одной песни я вижу строку «° †». Я сейчас пытаюсь исправить названия песен. Это было так долго, что я не могу вспомнить ни одного из названий песен или даже того, кем был артист.
Я не знаю, что такое настоящая кодировка, но я предполагаю, что iTunes пытается отобразить название песни в Unicode \ u00B0 \ u2020 (little-endian). Так что это даст мне оригинальные байты 0xB0 0x00 0x20 0x20. Таким образом, название песни может состоять из 1 или 2 китайских символов в зависимости от кодировки.
Наиболее распространенной кодировкой не-Unicode для китайского языка является GB5 или Big-5. Поэтому я использовал класс Encoding в .NET для преобразования байтов из Big-5 в Unicode. Когда я отображаю символы в текстовом блоке WPF, он отображается как '?' И пустые блоки (мусор). Затем я попробовал 10 других китайских иероглифов. Все они появляются как мусор в TextBlock.
Из того, что я могу сказать, проблема может быть в нескольких местах.
1.) ITunes может потерять несколько байтов при импорте.
2.) 0xB0 0x00 0x20 0x20 не может быть исходными байтами
3.) iTunes принял неверное решение о том, что такое оригинальная кодировка, и попытался преобразовать ее в Unicode
4.) Я еще не попробовал правильную кодировку
Возможно, TextBlock не знает, как отображать эти символы, но с Unicode это довольно хорошо. Я использовал его для отображения китайских символов Юникода раньше.
Кто-нибудь еще знает, что здесь может происходить? Мое мышление совершенно неверно? Есть ли лучший способ сделать это?
Edit:
Оказывается, iTunes не использует Unicode. На моей машине он использует кодовую страницу ANSI. Поэтому я расшифровал символы с помощью Windows-1252 (как говорит класс Encoding моя кодовая страница по умолчанию), а затем перекодировал их в Big-5. Это частично работает.
Мой пример, приведенный выше, не оказался ничем, кроме как, когда я посмотрел на некоторые другие названия песен. Я смог получить что-то разумное. Например, «± I’æ« OÄÖ »y» становится «寂 保齡 ». Вы можете заметить, что 2-й и 5-й символы не являются китайскими. Так что это не сработало полностью - но читайте дальше.
Я сделал имя исполнителя, которое было «± i´f © f» и которое дало мне «who», который является настоящим тайваньским певцом, AKA A-Mei. Итак, я искал в Google 張惠妹 張惠妹. Это дало полное название песни «寂寞 保齡球» на английском языке: «Lonely Bowling». Чего я не понимаю, так это почему одни персонажи работают, а другие нет? Есть идеи? Возможно, я использую неправильную кодовую страницу ANSI?