用Java处理法语字符

时间:2011-06-02 10:34:18

标签: java javascript encoding

我有一个页面,我搜索一个术语,它显示完美。不管它是什么字体。

现在,当我在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

5 个答案:

答案 0 :(得分:10)

您获得"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。出于这个原因,避免从一种编码转换为另一种编码,除非最终必要(即数据来自外部,第三种或专有来源等)。这只是如何解决方案从一个源转换为另一个源,知道源编码。

答案 1 :(得分:2)

这是一个编码问题,Ã清楚地表明这是UTF-8文本解释为ISO-Latin-1(或其表兄弟之一)。

确保顶部的JSP页面显示它使用UTF-8编码。

答案 2 :(得分:1)

我怀疑问题出在页面上的字符编码上。确保您提交的页面和显示的页面使用相同的字符集,并确保明确设置它。 例如,如果您的服务器在Linux上运行,则默认编码将为UTF-8,但如果您在Windows上查看该页面,它将假设(如果未指定编码)它将为ISO-8859-1。 此外,当您在服务器端接收提交的文本时,服务器将在构建字符串时采用默认字符集 - 而如果您未指定字符串,则您的用户可能使用了不同的编码。

答案 3 :(得分: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不是default encoding的系统上进行编译,那么您需要告诉编译器使用该编码: / p>

javac -cp foo.jar -encoding UTF-8 Bar.java

处理字符数据时,您的构建脚本和IDE设置必须保持一致。

如果文本编辑器将文件保存为UTF-8,那么在十六进制编辑器中,é将是字节序列C3 A9;在许多其他编码中,它将具有值E9。 ISO-8859-1和windows-1252将编码为C3 A9。您可以阅读Java源文件here中的字符编码。

答案 4 :(得分:0)

在文件&gt;中将jsp页面的编码更改为UTF-8;然后,属性在jsp页面的头部添加此行:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>