Java 处理多语言编码

Java 处理多语言编码,java,iphone,encoding,Java,Iphone,Encoding,在我的应用程序中,我从twitter上阅读推文,但推文不受语言限制。因此,当我试图发送中文/日文tweet的回复时,内容显示不正确。我目前已经设置了 response.setContentType("text/html;charset=UTF-8"); 在发送响应之前 我们如何处理多种语言 我可以看到发送的消息 {“lastPost”:{“lastUpdate”:毋成金口","pubDate:“2011年8月12日星期五00:39:09 UTC”,“消息id:10181494832956211

在我的应用程序中,我从twitter上阅读推文,但推文不受语言限制。因此,当我试图发送中文/日文tweet的回复时,内容显示不正确。我目前已经设置了

response.setContentType("text/html;charset=UTF-8");
在发送响应之前

我们如何处理多种语言

我可以看到发送的消息

{“lastPost”:{“lastUpdate”:毋成金口","pubDate:“2011年8月12日星期五00:39:09 UTC”,“消息id:101814948329562112}

这是一个json字符串,添加到响应中


在我的客户端,即iphone上,最后的帖子是“?”

告诉浏览器页面是UTF-8是一件好事,但没有用,除非您确保您实际上只在页面中写入UTF-8

要确保实现这一点,请执行以下操作:

  • 无论何时从twitter或其他什么地方阅读,总是需要UTF-8数据,请确保接收到UTF-8字节
  • 从原始字节创建字符串时,Java默认使用“平台默认编码”可以是任何类型。当从字节数组创建新字符串或使用读取器时,会发生字节到字符串的转换。这两种方法都允许您显式定义期望字节的加密。一旦选中第1点,并且收到UTF-8“是”,请确保在应用程序中指定使用UTF的所有位置-8将字节转换为字符串时
  • 使用Writer时,要将字符串转换为发送到浏览器(servlet Writer)的字节,同样的规则也适用:尽量显式并始终指定UTF-8
  • 如果将内容存储在数据库中,则存在两个编码问题。第一个问题是与应用程序通信时数据库使用的加密(连接编码),第二个问题是数据库实际存储字符串的编码(存储编码)。通常,您只能指定来自Java的连接编码,而存储编码是在创建数据库时在数据库中指定的(如果您使用的是mysql,请搜索“排序规则”)

  • 检测本应为UTF-8的字符串在何处被重新编码是一项艰巨的任务。99%的情况下,它会被转换为ISO拉丁语或类似的编码方式,这会导致像a或ì这样的特殊字符显示为两个字符的垃圾。通常,调试是找出这种情况发生的唯一方法。

    问题在于e客户端编码..它被设置为ISO-

    为什么不用UTF-8编码消息推文本身,这样您就只有一种编码?据我所知,您无法在http站点中更改编码本身。您确定您正确捕获了用户输入吗?您在另一端看到了什么?使用示例用户输入和显示更新问题yed输出。为了使2和3更具体,
    新的InputStreamReader(流,编码)
    是好的,但是
    新的InputStreamReader(流)
    新的FileReader(文件)
    是坏的。类似地,
    新的OutputStreamWriter(流,编码)
    是好的,但是
    新的OutputStreamWriter(流)
    新的FileWriter(档案)
    是不好的。如果你试图清除代码中所有假设默认编码的地方,
    grep
    ing这些模式是一个收集低挂果实的好方法。当我尝试使用chrome扩展检索消息时,效果很好……我想这可能是iphone客户端的问题。@Mike:你不能使用这种形式的构造函数!只有四个构造函数中最长的一个可用!否则您将无法检测到编码错误。查看第三个讲座中的幻灯片43,了解正确的方法。输入流读取器需要第二个构造函数参数
    Charset.forName(“UTF-8”).newDecoder()
    ,输出流编写器需要第二个参数
    Charset.forName(“UTF-8”).newEncoder()