问题: 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或其他平台 它转换的其他语言,但使那些 字符成为垃圾。只是 垃圾。
注意:当我从同一个游戏中读取它时,间隔!框架。即使垃圾字符被正确读取,它看起来也很好。
问题:为什么这些垃圾字符?
答案 0 :(得分:1)
问题在于以下几行:
String newString = new String(oldString.getBytes(), "WINDOWS-1252");
这对我来说就像是胡说八道。 Java使用UTF-16在内部存储所有字符串,因此您无法以此处尝试的方式调整Java字符串的编码。
getBytes()
方法使用默认平台编码返回字符串的字节。然后使用(可能)不同的字符集将这些字节转换为新字符串。结果几乎肯定会被打破。