java - FreeMarker 特殊字符输出为问号

标签 java encoding character-encoding freemarker iso-8859-15

我正在尝试提交包含特殊字符的字段的表单,例如 €ŠšŽžŒœŸ。据我所见ISO-8859-15 wikipedia page , 这些字符包含在标准中。即使请求和响应的编码都设置为 ISO-8859-15,当我尝试显示值时(在 JAVA EE 环境中使用 FreeMarker 2.3.18),值是 ????? ???。我已将表单接受的字符集设置为 ISO-8859-15,我已检查提交的表单是否包含内容类型 text/html;charset=ISO-8859-15(使用 Firebug )但我不知道如何显示正确的字符。如果我运行以下代码,则会显示正确的十六进制值 (ex: Ÿ = be)

我错过了什么?提前致谢!

System.out.println(Integer.toHexString(myString.charAt(i)));

编辑:

我在处理请求时有以下代码:

PrintStream ps = new PrintStream(System.out, true, "ISO-8859-15");
String firstName = request.getParameter("firstName");

// check for null before
for (int i = 0; i < firstName.length(); i++) {
     ps.println(firstName.charAt(i)); // prints "?"
}

BufferedWriter file=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path), "ISO-8859-15"));
file.write(firstName); // writes "?" to file (checked with notepad++, correct encoding set) 
file.close();

最佳答案

根据十六进制值,表单数据提交正确。 问题似乎与输出有关。如果字符不能用正在使用的字符集表示,Java 会用 ? 替换它。

构建输出流时必须使用正确的字符集。你用什么命令?我不知道 FreeMarker,但可能会有类似的东西

Writer out = new OutputStreamWriter(System.out);

这应该用类似这样的东西代替:

Writer out = new OutputStreamWriter(System.out, "iso-8859-15");

顺便说一下,UTF-8 通常是更好的编码字符集选择。

关于java - FreeMarker 特殊字符输出为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136830/

相关文章:

python - 如何在python中读取unicode文件(不是UTF-8)

mysql - 如何查看 MySQL 中列的 utf8mbf 排序规则?

iphone - 在 UILabel 中显示重音符号和其他 UTF-8 字符

java - Maven 依赖作为模块

java - BouncyCaSTLeProvider 未从 PKCS#12 文件获取私钥和​​证书链

Python 电子邮件负载解码

perl - List::Util - 减少 - 长度 - 编码 - 问题

java - 更改 volatile 字段是否会更新对象?

java - Gradle 未在模拟器上构建应用程序

utf-8 - 如何在经典 ASP 中将 Windows-1255 转换为 UTF-8?