utf-8, декодирующий в Java

Примечание стороны: вместо того, чтобы просить у пользователя 1, 2, 3 или 4, необходимо непосредственно попросить, чтобы они ввели переменную, которую они хотят решить:

Решают уравнение y = m * x + b, для которой переменной (y, m, b, выходят)?

Это заставляет пользователей программы думать больше в проблемной области вместо некоторой технически бесполезной косвенности.

<час>

, Поскольку у Вас есть фон Python, необходимо знать, что добавление отступа строк важно и имеет значение. Это - то же для программ Java. Единственная разница - то, что компилятор Java игнорирует добавление отступа полностью. Но программы Java также прочитаны людьми, и для них, добавление отступа жизнеспособно для понимания структуры программы. Код, который Вы отправили, имеет непоследовательное добавление отступа, и необходимо позволить IDE зафиксировать это.

<час>

Ваша программа должна быть структурирована как это:

public class AlgebraTutor {

    private final Scanner in = new Scanner(System.in);
    private final PrintStream out = System.out;

    private int attempts = 0;

    void solveForY() {
        ...
    }

    void solveForM() {
        ...
    }

    void solveForB() {
        ...
    }

    void mainMenu() {
        while (true) {
            out.println("Solve the equation y = m * x + b for which variable (y, m, b), or quit?");
            if (!in.hasNextLine()) {
                return;
            }

            switch (in.nextLine()) {
            case "y":
                solveForY();
                break;

            case "m":
                solveForX();
                break;

            case "b":
                solveForB();
                break;

            case "q":
            case "quit":
                return;
            }
        }
    }

    public static void main(String[] args) {
        new AlgebraTutor().mainLoop();
    }
}
7
задан user162346 29 October 2009 в 08:30
поделиться

4 ответа

При работе со строками всегда помните: byte ! = char . Итак, в вашем первом примере у вас есть char c3 , а не байт c3 , что является огромной разницей: байт будет частью UTF-8 последовательность, но char уже является Unicode . Поэтому, когда вы конвертируете это в UTF-8, символ Unicode c3 должен стать байтовой последовательностью c3 83 .

Итак, вопрос: как это произошло вы получаете строку? В этом коде должна быть ошибка, которая неправильно обрабатывает закодированные в UTF-8 последовательности байтов .

Обычно работает ISO-8859-1 , потому что эта кодировка не изменяет char с кодовой точкой <256 (т.е. любое значение от 0 до 255), поэтому последовательности байтов в кодировке UTF-8 не будут изменены.

Ваш последний пример также неверен: char e9 равен é в ] ISO-8859-1 и Unicode. В UTF-8 это недопустимо, так как это не байт и поскольку префикс байт c3 отсутствует. Тем не менее, он правильно представляет искомую строку Unicode.

9
ответ дан 7 December 2019 в 01:22
поделиться

Если вы начнете со строки Java, где "d \ u00C3 \ u00A9jeuner" .equals (stmt) , то данные уже повреждены на этом этапе.

A Символ Java char не является символом C char . char в Java имеет ширину 16 бит и неявно содержит данные в кодировке UTF-16 . Попытка сохранить любые другие закодированные данные в типе Java char / String вызывает проблемы. Символьные данные в любой другой кодировке должны иметь вид данных байтов .

Если вы читаете параметр с помощью API сервлета , то вероятно, что HTTP-запрос содержит несогласованные или недостаточные информация о кодировании. Проверьте код вызова и заголовки HTTP. Скорее всего, клиент кодирует данные как UTF-8 ,

1
ответ дан 7 December 2019 в 01:22
поделиться

вы рассматривали

диаграммы UML 2 Создания с Затмением Инструменты UML2 - Обучающая программа ?

я имел более старые ссылки для таких инструментов, но новые, полагаются на проект UML2 (описанный в обучающей программе). MDT-UML2Tools находится в производстве, Omondo есть, но не свободно.
Папирус UML , например, основан на UML2 Tool.

На рынке имеется инструмент, который может выполнить указанные выше действия (класс UML, пакет и взаимодействие). Называется ModelGoon . Последний раз пробовали в июле 2018 года.

Полный список доступен на Eclipse marketplace .

-121--1539552-

У меня очень похожая проблема, за исключением того, что моя форма использует запрос «GET», а не запрос «POST».

Итак, мой URL-адрес - это что-то вроде: http ://localhost: 4502/form.jsp? query = d% C3% A9jeuner

request.getCharacterEncoding() = ISO-8859-1
response.getCharacterEncoding() = UTF-8
request.getParameter("query") = déjeuner

Так что если для декодирования параметра запроса используется UTF-8 (что явно не так) или это просто ошибка браузера, потому что браузер не устанавливает какой-либо заголовок кодировки символов (что опять же не имеет большого смысла, потому что это просто ошибка браузера Вот полный набор заголовков и обратите внимание на A9% C3% в URL.

http://localhost:4502/form.jsp?query=d%C3%A9juerne

GET /form.jsp?query=d%C3%A9juerne HTTP/1.1
Host: localhost:4502
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.17) Gecko/2010010604 Ubuntu/9.04 (jaunty) Firefox/3.0.17
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Проблема в том, что я скопировал и вставил запрос в форму браузера и неправильно закодировал его. И в хром, и в firefox.

0
ответ дан 7 December 2019 в 01:22
поделиться

Через некоторое время Дальнейшее расследование. Я нашел этот ответ

Как заставить UTF-8 работать в веб-приложениях Java? .

Все дело в установке URIEncoding = "UTF-8" в коннекторе tomcat.

Теперь выясним, как это сделать в CMS, которую мы используем (CQ5 / Day).

0
ответ дан 7 December 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: