2

我试图了解我应该如何处理 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":"├ª├©├Ñ"}"。但是我如何解码奇怪的字符呢?

一种解决方案是在发送请求之前对值进行编码 URIComponent()。这是正确的方法吗?或者,还有更好的方法?

4

2 回答 2

1

你的代理是用什么语言写的?在 Java 中,您可以使用 getBytes 将 REQUEST_CONTENT 数据转换为字节数组,然后将其实例化为新的 UTF-8 字符串。这些方面的东西:

byte[] requestContentBytes = requestContentString.getBytes();
String reqeustContentUTF8 = new new new String(requestContentBytes,"UTF-8");

实际上,我不确定 getBytes() 调用。您可能需要为此提供一个字符集参数。如果没有参数,它应该使用平台默认字符集将字符串值转换为字节。如果运行代理的操作系统与您正在查看字符串的操作系统具有相同的默认字符集,那么我认为这是正确的方法。但是,如果您确实需要一个 charset 参数,那么重点是它不会是 UTF-8 ——否则,使用 UTF-8 参数输入新字符串时的净效果将是空操作。

于 2013-07-12T18:23:46.553 回答
0

我认为这是您呼叫的网络代理?如果是这样,那么您得到的就是代理所期望的。

读取时不翻译 REQUEST_CONTENT。所以你看到的是字符串中的原始 UTF-8。您需要手动解码。

最安全的方法是在发送数据之前进行 URLEncode 和 URLDecode 以维护字符。

另一种选择是使用 XPages 中的 JSON 服务组件

Extlib OpenNTF有一个用于 extlib JSON 服务的示例数据库。这是托管的数据库(不确定谁在托管它,所以不能保证它会留在那里)。

另一种选择是Domino 数据服务(DDS)。这允许您直接以 JSON 格式访问视图/文档。

在这三个选项中,我个人会选择 XPages 解决方案,因为它可以更好地控制数据。

于 2013-07-12T13:58:11.540 回答