JSF1.1中的字符编码

JSF1.1中的字符编码,jsf,utf-8,character-encoding,sakai,Jsf,Utf 8,Character Encoding,Sakai,我正在使用JSF 1.1开发一个工具,我遇到了以下问题: 我的支持bean中有一个字符串,打印为: ./src.cpp: In function ‘int main()’: ./src.cpp:4: error: ‘dsdada’ was not declared in this scope 在txt文件上 但当我把它放在一个h:InputExtArea上时,它是这样的: ./src.cpp: In function ‘int main()’: ./src.cpp:4: error:

我正在使用JSF 1.1开发一个工具,我遇到了以下问题: 我的支持bean中有一个字符串,打印为:

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

但当我把它放在一个h:InputExtArea上时,它是这样的:

./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope
for (char ch : msg.toCharArray())
  System.out.format("%04x ", (int) ch);
-

在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" />

...

字符
存在于字节的Unicode中。当您使用(Windows默认)编码对这些字节进行编码时,您会得到
的€€

您需要将
pageEncoding
显式设置为UTF-8

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


这样,它将使用UTF-8打印字符,并隐式地将
内容类型
标题设置为正确。

字符
以字节的Unicode形式存在。当您使用(Windows默认)编码对这些字节进行编码时,您会得到
的€€

您需要将
pageEncoding
显式设置为UTF-8

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


这样,它将使用UTF-8打印字符,并且隐式地将
内容类型设置为正确的
标题。

为了确定转码错误的来源,请在每次转码操作后检查数据。使用工具确定值应该是什么

例如,JSP编写器正在将Java字符串从UTF-16(Java字符串的编码)转换为UTF-8。另一个转码操作看起来像是从本机系统读取程序输出

/* String[0] as stdout, String[1] as stderr */
String[] results = sshBO.execCommand(cmd, timeout);
例如,您可以使用如下代码打印字符串的十六进制值:

./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope
for (char ch : msg.toCharArray())
  System.out.format("%04x ", (int) ch);
代码点
应打印为
2018
。您编写文件的代码可能与读取输入的代码有类似的错误,从而在问题的根源上误导您



这没有什么区别,因为它接受UTF-16数据,将其转码到UTF-8,然后将其转码回UTF-16。但除此之外,如果字符串已损坏,则为时已晚。您正在错误的位置修复错误。

为了确定代码转换错误的来源,请在每次代码转换操作后检查数据。使用工具确定值应该是什么

例如,JSP编写器正在将Java字符串从UTF-16(Java字符串的编码)转换为UTF-8。另一个转码操作看起来像是从本机系统读取程序输出

/* String[0] as stdout, String[1] as stderr */
String[] results = sshBO.execCommand(cmd, timeout);
例如,您可以使用如下代码打印字符串的十六进制值:

./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope
for (char ch : msg.toCharArray())
  System.out.format("%04x ", (int) ch);
代码点
应打印为
2018
。您编写文件的代码可能与读取输入的代码有类似的错误,从而在问题的根源上误导您


这没有什么区别,因为它接受UTF-16数据,将其转码到UTF-8,然后将其转码回UTF-16。但除此之外,如果字符串已损坏,则为时已晚。您在错误的位置修复了错误。

谢谢BalusC,我尝试添加到我的页面,但似乎不起作用。同样的问题也会发生。还有什么我应该试试的吗?顺便说一下,你有一个很棒的博客。我确实从你的博客中学习了上传文件:)。谢谢BalusC,我尝试添加到我的页面,但似乎不起作用。同样的问题也会发生。还有什么我应该试试的吗?顺便说一下,你有一个很棒的博客。我确实从您的博客中了解了上载文件:)。