用Java处理法语字符
我有一个页面,我搜索一个术语,它显示完美。 无论它是什么字体。
现在,当我在JSP中有几个复选框时,我检查并提交。 在这些复选框中,我有一个盒子名称,如ABC Farmacéutica Corporation
。
当我点击提交按钮时,我正在调用一个函数并将所有参数设置为一个表单并将提交该表单。 (我在提交之前测试了特殊字符显示的警报,并且显示良好)。
现在,来到Java端,我使用Springs Frame工作。 当我在控制器中打印该术语时,它显示为ABC Farmacéutica Corporation
。
请帮忙……先谢谢。
编辑:
请尝试此示例示例
import java.net.*; class sample{ public static void main(String[] args){ try{ String aaa = "ABC Farmacéutica Corporation"; String bbb = "ABC Farmacéutica Corporation"; aaa = URLEncoder.encode(aaa, "UTF-8"); bbb = URLDecoder.decode(bbb, "UTF-8"); System.out.println("aaa "+aaa); System.out.println("bbb "+bbb); }catch(Exception e){ System.out.println(e); } } }
我得到输出,
aaa PiSA+Farmac%C3%A9utica+Mexicana+Corporativo bbb PiSA Farmacéutica Mexicana Corporativo
尝试按原样打印string aaa
。
这是一个编码问题,并且Ã
清楚地表明这是UTF-8文本被解释为ISO-Latin-1(或其表兄弟之一)。
确保顶部的JSP页面显示它使用UTF-8编码。
您将收到"ABC Farmacéutica Corporation"
因为您从客户端收到的字符串是ISO-8859-1
,您需要在对其进行URL解码之前将其转换为UTF-8
。 喜欢这个 :
bbb = URLDecoder.decode(new String(bbb.getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
注意 :某些编码无法从不同的编码转换为不同的编码,而不会有数据丢失的风险。 例如,您无法将Thaï字符( TIS-620
)转换为其他编码,甚至不能转换为UTF-8
。 出于这个原因, 避免从一种编码转换到另一种编码 ,除非最终需要(即数据来自外部,第三种或专有来源等)。这只是如何从一个源转换为另一个源的解决方案, 知道源编码。
我怀疑问题在于页面上的字符编码。 确保您提交的页面和显示的页面使用相同的字符集,并确保明确设置它。 例如,如果您的服务器在Linux上运行,则默认编码将为UTF-8,但如果您在Windows上查看该页面,则它将假定(如果未指定编码)则为ISO-8859-1。 此外,当您在服务器端接收提交的文本时,服务器将在构建字符串时采用默认字符集 – 而如果您未指定编码,则您的用户可能使用了不同的编码。
据我了解,文本在控制器代码中是硬编码的,如下所示:
ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "ABC Farmacéutica Corporation"); return mav;
我希望这会奏效:
ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "ABC Farmac\u00e9utica Corporation"); return mav;
如果是这样,问题是由于Java编辑器使用的字符编码与编译器用于读取源代码的编码不匹配。
例如,如果您的编辑器将Java文件保存为UTF-8,并且您在UTF-8不是默认编码的系统上进行编译,那么您需要告诉编译器使用该编码:
javac -cp foo.jar -encoding UTF-8 Bar.java
处理字符数据时,您的构建脚本和IDE设置需要保持一致。
如果文本编辑器将文件保存为UTF-8,那么在hex编辑器中,é将是字节序列C3 A9
; 在许多其他编码中,它将具有值E9
。 ISO-8859-1和windows-1252将编码为C3 A9
。 您可以在此处阅读Java源文件中的字符编码。
在文件>属性中将jsp页面的编码更改为UTF-8,然后在jsp页面的头部添加此行: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>