перевод UTF-8 строки в ASCII
- Войдите на сайт для отправки комментариев
Ср, 20/11/2013 - 16:23
Получаю символы с интернета в UTF-8 коде, символы складываются в строку. Хочу сравнить полученную строку с заданной ASCII строкой. Как перевести utf-8 код в ascii ?
if (client.connected()) { if (client.available()) { inChar = client.read(); if ((inChar==10)||(inChar==0)||(inChar=='\n')) currentLine=""; else currentLine+=inChar; if (currentLine==" <text>") writepost;
Как перевести utf-8 код в ascii ?
Одним из преимуществ является совместимость с ASCII — любые их 7-битные символы отображаются как есть. Если размер символа в кодировке UTF-8 = 1 байт. Код имеет вид (0aaa aaaa), где «0» — просто ноль, остальные биты «a» — это код символа в кодировке ASCII;
UTF8 - это возможность хранения в текстовом виде юникодных символов. Один символ может занимать 1, 2, 3, ... байта.
почему это utf в asc вдруг стало перевсети нельзя? Наверняка же нужно не все 65тыщ из утфа переводить. Через таблицу перевода посимвольно.
UTF8 - это возможность хранения в текстовом виде юникодных символов. Один символ может занимать 1, 2, 3, ... байта.
почему это utf в asc вдруг стало перевсети нельзя? Наверняка же нужно не все 65тыщ из утфа переводить. Через таблицу перевода посимвольно.
Для непонятливых или невнимательно читающих перевожу что написано в посте #1. В стандартной таблице ASCII 128 символов, все они соответсятвуют символам UTF-8 длинной 1 байт. То есть, все то что не карказяба и есть символ ASCII.
Что вы тут собрались переводить???
Едиственное что можно сделать при "переводе" это отсеивать карказябы, проверяя старший бит.
UTF8 - это возможность хранения в текстовом виде юникодных символов. Один символ может занимать 1, 2, 3, ... байта.
почему это utf в asc вдруг стало перевсети нельзя? Наверняка же нужно не все 65тыщ из утфа переводить. Через таблицу перевода посимвольно.
Для непонятливых или невнимательно читающих перевожу что написано в посте #1. В стандартной таблице ASCII 128 символов, все они соответсятвуют символам UTF-8 длинной 1 байт. То есть, все то что не карказяба и есть символ ASCII.
Что вы тут собрались переводить???
Едиственное что можно сделать при "переводе" это отсеивать карказябы, проверяя старший бит.
А как по-другому сравнивать 2 строки разных кодировок?
Так как есть так и сравнивайте. В чем проблема то? В строку попадают карказябы? Ну добавьте еще одно условие и будите получать куски строк без карказяб:
или при сборки строки игнорируйте карказябы:
он не находит такую строку, также как и любые символы в utf-8
Кто он? И как вы это определяете?
Программа не находит эту строчку, хотя она там есть, также программа не находит любые словосочетания, которые есть в тексте. Так как полученный текст в коде utf-8, а то что я ввожу в среду программирования «processing» в коде ascii, я предложил, что надо как то перевести полученный текст из utf-8 в ASCII, поэтому и создал эту тему.
Так как вы определяете что она там есть?
Что выводит:
посимвольно выводит все хорошо
Карказябы встречаются?
А так выводится ваша строка?
построчно тоже все выводится.
Кракозябр нет
Значит не верно задаете строку для сравнения.
Кстати, 10 это и есть '\n',еще стоит отсеивать перевод каретки
if
(
(inChar=='\0')||(inChar==
'\n'
)
||(inChar=='\r')
) currentLine=
""
;
А сравнения производить только после сборки строки:
Строка имеет вид " <«text»>нужный мне текст<«text»>" без « и »
Вроде я догадался в чем проблема.
Браузер выводит строки с пробелами для удобного чтения конструции html.
Скорее всего, arduino выводит без пробелов, я не зафиксировал этот момент во время посимвольного вывода. Дома посмотрю, отпишусь.
Это и есть не верно задать строку для сравнения. Копируйте ее прям из консоли в код.
А зачем так сложно перебором фильтровать спецсимволы? Всё что ниже пробела char(32), всё спецсимволы.
А ещё почитайте это. Иначе подозреваю вы начнёте винить компилятор в невозможности проверки эквивалентности строк. Похоже нужно создавать и закреплять в топике пост "принципиальные различия arduino и processing". Или "стандартные ошибки".
Увы, проблема не связана с пробелами. Статья не помогла.
Вот весь код:
В принятом тексте есть строка: " <text>Test</text>" в этом вы можете убедиться тут.
По идее должно вывести: "Test", но ничего не выводится. Что думаете?
строка63:
if (currentLine.equals(mytext) == true) {writepost;} else {print(currentLine.length());print("_");print(currentLine);print("_");println(mytext.length());}
внимательно смотрите, что у вас происходит пошагово, кстати, а без фигурных скобок if работает? да и функцию со скобками правильее вызывать.
Дорогой вы наш человек, в чем пишите то? Вы Процессинг от Ардуино отличаете? Это код для дуины.
Ошибка в вызове функции writepost.
Не разобрался где именно, просто вместо функции вставил ее содержание.
Заработало! Всем спасибо за помощь! =)
Я думал код для ардуины и есть processing
Я думал код для ардуины и есть processing
Тогда уж Wiring...