所以我认为下面的图片很好地展示了我的问题:
我希望原始字符串按原样打印,因为当我在响应中发送它时(使用JAX-RS)它实际上显示的是\ u2018,而不是它应该的左引号。但是,将方法EncodingUtils.clean(...)(它只是Apache Commons Lang StringEscapeUtils.unescapeJava(...)的包装器)应用于发送给响应的字符串并不会改变响应(它仍然是显示\ u2018)。从测试开始他们已经改变了,我在这里缺少什么以及我需要做些什么才能获得预期的替代品?
EDIT1:客户端是一个Android应用程序,麻烦的字符串是前面提到的JSON响应的属性之一。如果我不碰它,手机会显示这个奇怪的角色'€TM。如果我使用Windows-1252对其进行解码,则会向右打印字符,但它会将字符串的其他部分固定。
EDIT2:我有@Produces(text / json)。这些是报告的标题(注意我使用OkHttp进行请求处理):
Date: Tue, 23 Dec 2014 21:05:49 GMT
Connection: close
Server: Jetty(7.5.3.v20111011)
Via: 1.1 vegur
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1419368765324
OkHttp-Received-Millis: 1419368765736
此外,从Android打印到控制台接收到的字符串实际打印正确。我不知道发生了什么。
答案 0 :(得分:1)
我没有看到任何奇怪的行为。
Java已经unescapes字符串文字中出现的转义代码,因此testObj
包含Unicode字符0x2018和0x2019,而不是文字字符串" \ u2018"和" \ u2019"。因此,StringEscapeUtils.unescapeJava(...)
返回相同的字符串。这意味着testObj.contentEqual(postTreatmentTestObj)
为真,因此assertFalse(...)
测试失败。
答案 1 :(得分:0)
所以,经过几个小时的愚蠢地伸展我的头脑后,我知道发生的事情基本上是这样的(请参阅2013年4月15日的评论,截至2014年12月23日的工作解决方案):https://code.google.com/p/android/issues/detail?id=3552
有时Google,有时......