кодировка символов в JSF 1.1 - PullRequest
2 голосов
/ 15 мая 2011

Я разрабатываю инструмент с использованием JSF 1.1, и у меня возникла эта проблема: В моем бобе есть строка, которая печатается как:

./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope

в текстовом файле.

Но когда я помещаю его в h: inputTextArea, это выглядит так:

./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope

-

<%@ page contentType="text/html;charset=UTF-8" %>
and this
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>

Но это тоже не сработало. Может кто-нибудь сказать мне, как это исправить. Спасибо

/* String[0] as stdout, String[1] as stderr */
String[] results = sshBO.execCommand(cmd, timeout);

/* Done with SSH things */
sshBO.closeSession();

/* Bring the output and err to the presentation */
msg = results[1]+results[0];
FileServices.saveStringToFile("F:/myoutput.txt", msg);
msg = new String(msg.getBytes("UTF8"), "UTF8"); /* makes no difference */

на страницах JSP:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://sakaiproject.org/jsf/sakai" prefix="sakai" %>

<f:view >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
...

<h:inputTextarea disabled="true" value="#{SSH.msg}" styleClass="myTextArea" />

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Символ существует в байтах Unicode 0xE2 0x80 0x98 . При использовании кодировки CP1252 (по умолчанию в Windows) для кодирования этих байтов вы получаете ‘.

Вам необходимо явно установить pageEncoding в UTF-8.

<%@ page pageEncoding="UTF-8" %>

Таким образом, он будет печатать символы, используя UTF-8 и , неявно устанавливая заголовок Content-Type вправо.

0 голосов
/ 18 июня 2012

Чтобы определить источник вашей ошибки транскодирования, проверяйте данные после каждой операции транскодирования. Используйте инструмент , как этот , чтобы определить, какими должны быть значения.

Например, ваш JSP-писатель транскодирует строки Java из UTF-16 (кодирование строк Java) в UTF-8. Другая операция транскодирования выглядит как чтение программы вывода из собственной системы.

/* String[0] as stdout, String[1] as stderr */
String[] results = sshBO.execCommand(cmd, timeout);

Например, вы можете напечатать шестнадцатеричные значения ваших строк, используя такой код:

for (char ch : msg.toCharArray())
  System.out.format("%04x ", (int) ch);

Кодовая точка должна печататься как 2018. Код записи вашего файла может содержать ошибку, аналогичную коду, который читает ввод, вводя вас в заблуждение относительно источника проблемы.


msg = new String(msg.getBytes("UTF8"), "UTF8"); /* makes no difference */

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...