我正在使用JSF 1.1开发一个工具,但我遇到了这个问题:我的背豆中有一个字符串,打印为:
./src.cpp: In function ‘int main()’:
./src.cpp:4: error: ‘dsdada’ was not declared in this scope
在 TXT 文件上。
但是当我把它放在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" />
字符‘
存在于0xE2 0x80 0x98字节的 Unicode 中。当您使用 CP1252(Windows 默认)编码对这些字节进行编码时,您会得到‘
.
您需要将pageEncoding
显式设置为 UTF-8。
<%@ page pageEncoding="UTF-8" %>
这样,它将使用 UTF-8 打印字符,并隐式设置正确的Content-Type
标头。
为了确定转码错误的来源,请在每次转码操作后检查数据。使用像这样的工具来确定值应该是什么。
例如,Java 字符串由 JSP 编写器从 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。但除此之外,如果你的字符串损坏了,那就太晚了。您在错误的位置修复了错误。