文本编码转换Play中的垃圾字符! 1.2.4框架

时间:2013-06-06 07:14:50

标签: java encoding character-encoding playframework playframework-2.0

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

上下文:我们正在尝试将文本“”我叫MT繁体版“台港澳专属服务器上线!”从输入文本字段存储到使用Play的mysql! 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 «ç‰å€æ¸ææ³å°å±ääºææ ™¨ä¸Šç·šï¼ “

  

问题是值之间有字符 。当我读到这个   来自mysql的原始数据使用其他平台,如java,ruby或其他平台   它转换的其他语言,但使那些 字符成为垃圾。只是   垃圾。

注意:当我从同一个游戏中读取它时,间隔!框架。即使垃圾字符被正确读取,它看起来也很好。

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

1 个答案:

答案 0 :(得分:1)

问题在于以下几行:

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

这对我来说就像是胡说八道。 Java使用UTF-16在内部存储所有字符串,因此您无法以此处尝试的方式调整Java字符串的编码。

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