| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Определение языка текста |
| Автор: Toohtik 30.11.2006, 00:58 | ||
Здраствуйте. Возникла задача в которой надо определить язык текста. Эту задачу я пытаюсь решить путем сравнения символов ASCII:
Но в результате у меня считаются только английские символы. В чем может заключатся ошибка? Ести ли какие нибудь другие пути решения этой задачи? Можно даже функциями WinApi. |
| Автор: Sartorius 30.11.2006, 01:01 |
| Не в юникоде строчка то? |
| Автор: Toohtik 30.11.2006, 01:09 |
| Честно говоря даже и не знаю. Сама программа написана на Api, она читает в readfile текстовый файл. А как определить Юникод или не Юникод? |
| Автор: satrap 30.11.2006, 02:34 | ||
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_langref_Data_Type_Ranges.asp
|
| Автор: codelord 30.11.2006, 02:43 |
Открой Hex редактором если начало файла такое: FFFE или EFBB то юникод если нет то видимо нет. ну или посчитай сколько символов если текст не большой (или посмотри с помощью текстового редактора), юникод символ занимает 2 байта, т.е. если например 20 символов то файл юникод будет весить 40 байт, а обычный текст 20 байт. ну или еще открой блокнотом и выбери сохранить как и сохрани как тебе нужно там можно выбрать. |
| Автор: peetonn 30.11.2006, 02:52 |
| заметь: у символа 'А' (русского) код 128 однако это неверно: если char a = 'А'; то a == (char) 128; // вовсе не так!!! |
| Автор: Toohtik 30.11.2006, 20:22 |
| Что значит начало? Открыл при помощи winhex в граффе offset - 00000 00000001.... т.е. FFFE или EFBB и не пахнет, а сама информация такого типа:E2 F2 EF... По размеру 16 букв - 18 байт |
| Автор: JackYF 30.11.2006, 21:08 |
| В любом случае попробуй так: bool Lang(char* readfile) { int rus=0,en=0; int i=0; int k; k=strlen(readfile); for(i=0;i<k;++i) { if((readfile[i]>'А')&&(readfile[i]<'я')) rus++; else if((readfile[i]>'A')&&(readfile[i]<'z')) en++; } if(en>rus) return true; else return false; } |
| Автор: Toohtik 30.11.2006, 21:35 |
| JackYF, спасибо помогло!!! |
| Автор: Rockie 2.12.2006, 01:04 |
| JackYF, символы в таблице ASCII не обязательно располагаются подряд (как в алфавите) и не идут цельным куском(в интервале от 'A' до 'z' еще попадают '\', '[', ']' и тд) |
| Автор: JackYF 4.12.2006, 16:13 |
| Rockie, не спорю. Мое решение далеко не оптимальное. Оно есть второе, что приходит в голову... В принципе, если мы проверяем текст, то частота встречаемости \ , [ , ] на порядок меньше частоты встречаемости английских и русских букв. Если текст написан целиком на русском или английском языках, то ошибки, думаю, не будет. |