我有一个使用Android编写的客户端/服务器应用程序,我使用与android捆绑的标准org.json包类来进行解析和创建。
我一直在服务器端出现奇怪的字符,例如生成的json字符串中间(不是完整的字符串,因为它很大):
{!lo":"es_MX","id":2791884,"os":"8"}
正如您所见,(!)感叹号随机出现而不是双引号。我还会在字符串中间出现其他随机字符。这很奇怪。
以下是创建JSON对象的代码...
JSONObject jsonObject = new JSONObject();
jsonObject.put("key", someValue);
以下是发送..
的代码HttpPost type = new HttpPost(<server url here>);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("v", jsonObject.toString()));
type.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
httpClient.execute(type); // This is a DefaultHttpClient
我说是随机的,但是这个确切位置的感叹号在许多错误中是一致的,但不是每次都是如此。大约有5条消息出现此错误,每天数万条。通常不是插入到json中的值的内容,而是定义消息结构的字符(例如上面的引号字符),这告诉我这不是字符集问题。
有没有人遇到过这个?
答案 0 :(得分:0)
似乎你正在以其他格式编写字符串,并以另一种格式接收文本解码 喜欢iso到utf。
答案 1 :(得分:0)
您的发件人似乎没有正确设置character set。西班牙语将具有常规ASCII或大多数Windows编码中不存在的符号,您需要使用UTF-8:
Content-Type: text/html; charset=utf-8
在不知道您正在使用哪个HTTP交换(read more)的情况下,无法为您提供确切的代码段来解决问题 - 但这应该很容易理解。
答案 2 :(得分:0)
您提供的信息不足。解决问题的根本方法是将所有(!)字符替换为(“)。
string.replaceAll("!", "\"");
我想这是服务器端问题。
答案 3 :(得分:0)
我也有同样的问题。让我写更多来描述我的环境。我的服务器以json格式返回数据。但我的问题与ąść
之类的特殊字符有关。你应该知道,在这种情况下,json_encode()
将从服务器返回字符串文本null
。
我知道,很糟糕!所以我在选择数据库之前添加了mysql_query('SET CHARACTER SET utf8');
。这允许我从服务器中取出带有特殊变音符号的字符串。
现在在应用网站上,我通过GET
方法从服务器获取数据。首先,我将结果数据存储到InputStream
。然后我将它打包到InputStreamReader中并逐字节地将其附加到stringBuilder中。那个准备好的附加文本是通过toString()
就绪字符串进行转换。然后我把它放到了new JsonArray(readyString)
。然而,我发现json的一些文本部分有奇怪的字符..特别是在那些特殊字母如żóć
的地方。例如"description":"aaa"
抛出“descriptionPffa”:“aa”null:`。
我决定尝试另一种方法来转换数据结果。在我从服务器转换数据的地方我使用下面的方法。最后,wgen我得到了byteArrayOutputStream对象,我将其更改为new String(byteArray)
,然后它以某种方式与new JsonArray(new String(byteArray))
一起使用!
public class Streams {
public static byte[] getBytes(InputStream is) {
int len;
int size = 1024;
byte[] buf = new byte[0];
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
buf = new byte[size];
while ((len = is.read(buf, 0, size)) != -1)
bos.write(buf, 0, len);
buf = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return buf;
}
}
答案 4 :(得分:-1)
在客户端上打印json(使用Log.d或类似命令),然后在将其发送到服务器之前查看它是否包含奇怪的字符。