[英]Text encoding converts junk character in Play! 1.2.4 framework
问题: Play中的字符编码! 1.2.4框架成为。
上下文:我们正在尝试使用Play将文本“《我叫MT繁体版》台港澳专属伺服器上线!”存储在mysql中。 1.2.4框架。
我们遵循的步骤:
1)从用户那里获取输入的UI。 lang语言文字,所以我们尝试了Japneese Char。 注意:页面设置为UTF-8字符编码。
2)发布提交后即可玩! 控制器,控制器仅读取输入并使用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中阅读它时! 框架。 即使正确读取了垃圾字符,看起来也很好。
问题:为什么那些垃圾字符?
问题是以下行:
String newString = new String(oldString.getBytes(), "WINDOWS-1252");
对我来说这似乎是胡说八道。 Java使用UTF-16在内部存储所有字符串,因此您无法以此处尝试的方式调整Java字符串的编码。
getBytes()
方法使用默认平台编码返回字符串的字节。 然后,您可以使用(可能)不同的字符集将这些字节转换为新的字符串。 结果几乎可以肯定会被打破。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.