我正在尝试理解如何在AJAX请求中处理特殊/外来字符。
我的测试代码如下:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","test.json",true);
xmlhttp.setRequestHeader("Content-type","application/json; charset=UTF-8");
xmlhttp.send('{"test1":"æøå"}');
在服务器(IBM Domino)上,我收到此内容REQUEST_CONTENT =“{”test1“:”├ª├©├Ñ“}”。但是如何解码奇怪的角色?
一种解决方案可能是在发送请求之前对值进行encodeURIComponent()编码。这是正确的方法吗?或者有更好的方法吗?
答案 0 :(得分:1)
您的代理人使用什么语言撰写?在Java中,您可以使用getBytes将REQUEST_CONTENT数据转换为字节数组,然后将其实例化为新的UTF-8字符串。这些方面的东西:
byte[] requestContentBytes = requestContentString.getBytes();
String reqeustContentUTF8 = new new new String(requestContentBytes,"UTF-8");
实际上,我不确定getBytes()调用。您可能需要提供一个charset参数。如果没有参数,它应该使用平台默认字符集将String值转换为字节。如果代理运行的操作系统与您正在查看字符串的操作系统具有相同的默认字符集,那么我认为这是正确的方法。但是,如果你确实需要一个charset参数,重点是它不会是UTF-8 - 否则当用UTF-8参数输入新String时的净效应将是无操作。
答案 1 :(得分:0)
我认为这是您正在呼叫的Web代理?如果是这样,那么你得到的回报就是代理商的期望。
读取时不翻译REQUEST_CONTENT。所以你看到的是字符串中的原始UTF-8。您需要手动解码。
最安全的方法是在发送和URLDecode数据之前URLEncode来维护字符。
另一种选择是在XPage中使用JSON服务组件
Extlib OpenNTF有一个extlib JSON服务的示例数据库。 Here is that DB hosted(不确定是谁托管它,所以不能保证它会留在那里)。
另一个选项是Domino Data Service(DDS)。这允许您直接以JSON格式访问视图/文档。
在这三个选项中,我个人会选择XPages解决方案,因为它可以更好地控制数据。