2017-02-14 4 views
0

Файл содержит нелатинский контент и кодируется в UTF8. В существующем коде используется «fopen», чтобы открыть файл, проанализировать его и называет мою функцию validate нелатинским контентом и передает данные как char*.Обработка кодированного char * utf8 char *

void validate(const char* str) 
{ 
    .... 
} 

я должен сделать некоторые проверки на пройденный char массив.

Приложение использует Sun C++ 5.11 и которое, я думаю, не поддерживает unicode. (Я googled для поддержки unicode на Sun C++ 5.11, я не получил никаких правильных указателей на поддержку юникода. Поэтому я написал простую программу, чтобы проверить, поддерживает ли Sun C++ Unicode, и программа не скомпилировалась).

Как сделать валидацию на входе char*? Можно ли использовать wchar_t?

+0

Все зависит от того, что вы подразумеваете под «валидацией» ... Как вы должны «проверять» текст? Какие требования вы предъявляете к созданию своей функции? –

+0

Мне нужно проверить наличие специальных символов (требование имеет некоторые нелатинские символы для сравнения с такими, как «Æ», «ì»), последовательные пробелы. – NJMR

+0

Может быть, [этот старый вопрос] (http://stackoverflow.com/questions/313555/light-c-unicode-library) может вам помочь? –

ответ

1

Приложение использует <compiler> и который я думаю, что не поддерживает юникод

Это не проблема. Вам нужна только поддержка компилятора для юникода для встраивания строковых литералов в коде кода Unicode или для символов фиксированной ширины для представления UTF-16 или UTF-32. Ваш юникод - это UTF-8 и поступает из пользовательского ввода, поэтому поддержка компилятора unicode не требуется.

Как сделать валидацию на входе char*?

В стандартной библиотеке C++ имеется очень мало инструментов для обработки unicode. Предоставляемые инструменты в основном состоят из преобразования между различными форматами unicode, и даже эти инструменты недоступны до C++ 11.

Ввод и вывод в основном просто копирование байтов, поэтому для этого не требуется значительная обработка. Для другой обработки (которую вы, по-видимому, нуждаетесь в «проверке») вам нужно будет самостоятельно реализовать инструменты или использовать сторонние инструменты. Вам нужно будет ссылаться на ~ 1000 страниц стандарта Юникод, если вы хотите реализовать себя: http://www.unicode.org/versions/Unicode9.0.0/UnicodeStandard-9.0.pdf

Можно ли с помощью wchar_t?

wchar_t - это родной широкоугольный символ, используемый для кодирования собственной широкоугольной кодировки системы. UTF-8 не использует широкие кодовые единицы.

+0

Я планирую сохранить список недопустимых символов в текстовом файле, а кодировка будет utf8. Затем прочитайте содержимое в массиве символов, а затем выполните проверку этого массива. – NJMR

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