1

问题: Play 中的字符编码!1.2.4 框架变成。

上下文:我们正在尝试使用Play!1.2.4 框架。

我们遵循的步骤:

1) UI 从用户那里获取输入。任何语言文本,所以我们尝试了 Japneese Char。注意:页面设置为 UTF-8 字符编码。

2) 将提交发布到 Play!控制器,控制器只是读取输入并使用 Play 存储它!模型。下面提到的片段,

public static void text_create() throws UnsupportedEncodingException,
        ParseException {
    System.out.println("params :: text string value :: "    + params.get("text"));

    String oldString = params.get("text");

    // Converting the input string(which is UTF-8 format) and parsing to Windown-1252
    String newString = new String(oldString.getBytes(), "WINDOWS-1252");        

    // 1. passing encoded text to mysql. 
    // 2. TextCheck table and the column 'text' has encoding and collation format as UTF-8.
    // 3. TextCheck > text column mentioned as String in model.
    TextCheck a = new TextCheck(newString);

    List<Object> text = TextCheck.TextList();
    render(a,text);
}

它将 TEXT 值存储为“《æˆ'å�«MTç¹�體版》å�°æ¸¯æ¾³å°ˆå±¬ä¼ºæœ�器上線ï¼�”

问题是值之间有字符�。当我使用其他平台(如 java、ruby 或其他语言)从 mysql 读取这些原始数据时,它会进行转换,但会将这些字符视为垃圾。只是垃圾。

注意:有趣的是,当我从同一个 Play 中阅读它时!框架。即使垃圾字符被正确读取,它看起来也很好。

问题:为什么那些垃圾字符?

4

1 回答 1

1

问题是以下行:

String newString = new String(oldString.getBytes(), "WINDOWS-1252");

这在我看来是无稽之谈。Java 在内部使用 UTF-16 存储所有字符串,因此您无法以您在此处尝试的方式调整 Java 字符串的编码。

getBytes()方法使用默认平台编码返回字符串的字节。然后,您使用(可能)不同的字符集将这些字节转换为新字符串。结果几乎肯定会被打破。

于 2013-06-06T07:25:35.703 回答