2013-07-09 3 views
1

Есть ли способ обнаружения кодированных символов Windows-1251?Как обнаружить кодированные символы Windows-1251

IMO, в отличие от многобайтовых нативных символов, Windows-1251 - это 8-битовое кодирование символов, поэтому невозможно отличить его от других 8-битных собственных символов, таких как latin1. Если я ошибаюсь, пожалуйста, исправьте меня.

Первая подсказка для меня - locale, я принимаю все non-ascii символов как Windows-1251, если локаль ru.

Есть ли лучшие способы?

UPDATE:

Вот контекст моего вопроса, есть некоторые Windows-1251 закодированные символы в ID3 информации о MP3-файлов, я должен обнаружить Windows-1251 закодированные символы, а затем конвертировать их в UTF-16, используя icu4c, в противном случае закодированные символы Windows-1251 будут отображаться в моей системе нечитабельно (Android). Я считаю, что некоторые из вас имеют лучшие способы.

+0

Что вы пытаетесь обнаружить? –

+0

Некоторые файлы MP3 имеют кириллические символы в тегах ID3, которые закодированы в Windows-1251. – Alan

+0

Итак, вы хотите взять файл MP3 и определить, закодированы ли теги ID3 в 1251? –

ответ

0

Там не существует надежный способ обнаружения, когда дана в качестве входных данных массива из 8 битовых символов, которые 8 битого кодирование было использованы для этих символов.

+0

Так что, используя язык, на самом деле правильный путь? – Alan

+1

Нет. Моя машина не использует 1251, и ваши файлы по-прежнему будут содержать 1251 закодированные теги при перемещении файла на мою машину. –

+0

Я имею в виду, если locale является ru (русский), тогда я обрабатываю одиночные байтовые символы не-ascii как Windows-1251. Потому что наш целевой рынок - русский, поэтому я встретил проблему нечитаемых персонажей в некоторых российских MP3-файлах. – Alan

1

Функция GetACP может быть использована для определения этого. Он возвращает идентификатор кодовой страницы ANSI, которая в настоящее время активна для системы.

Зарегистрированный список идентификаторов кодовой страницы можно найти here. Тот, который вы ищете, - 1251, что соответствует кодовой странице «ANSI Cyrillic (Windows)».

Очень прост в использовании от кода; например в C:

#include <Windows.h> 

int main() 
{ 
    if (GetACP() == 1251) 
    { 
     MessageBoxW(NULL, 
        L"Your system uses the ANSI Cyrillic code page.", 
        L"Code Page Detection", 
        MB_OK | MB_ICONINFORMATION); 
    } 
    return 0; 
} 
+0

Спасибо, но, возможно, вы неправильно поняли мой вопрос из-за моего плохого английского. На самом деле, я должен различать собственные символы, чтобы проверить, закодирована ли это Windows-1251 (кириллица), поэтому я буду конвертировать их в UTF с помощью icu4c. Я могу прояснить ситуацию? – Alan

Смежные вопросы