我的数据是JSON文件时遇到问题。我正在使用Google的以下链接。
http://www.google.com/finance/company_news?q=AAPL&output=json"
当我想解析数据并将其显示在屏幕上时,会发生我的问题。由于某种原因,数据未正确解码。
原始数据:
1.) one which must have set many of the company\x26#39;s board on the edge of their
2.) Making Less Money From Next \x3cb\x3e...\x3c/b\x3e
当我输入数据时,请执行以下操作:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
is.close();
json = sb.toString();
我收到的输出是以下内容(使用org.json从json文件中提取数据)(请注意,缺少反斜杠):
1.)one which must have set many of the companyx26#39;s board on the edge of their
2.)Making Less Money From Next x3cbx3e...x3c/bx3e
我目前用于处理第一个问题的方法:
JSONRowData.setJTitle((Html.fromHtml((article.getString(TAG_TITLE).replaceAll("x26", "&")))).toString());
第二个虽然逃脱了我(没有双关语)
我认为这不起作用的原因是转义字符用于转义字符。香港专业教育学院尝试了许多不同的方法来读取数据,但我没有运气。有没有一种方法可以导入数据来解决此问题,而无需使用正则表达式?
解
今天我们的宿敌:“ \ x26”-ASCII(十六进制表示法)
将原始数据读取到Char数组中。apache的commons.io库是执行此操作的好方法。完成此操作后,在for循环中读取char数组以查找“
\”,如果有命中,请在下一个数组位置查找“
x”。如果再次命中,请在char数组中获取下两个字符。这两个字符是您的ASCII十六进制值。将十六进制转换为十进制形式,然后将十进制转换为字符。将此字符添加到字符串生成器中。
如果没有匹配项(带有“ \”),则将char附加到字符串生成器。现在,我们可以调用该.toString()
方法并将其转换为字符串。
从那里,数据可能包含一些HTML残余(’和/或 ****在这种情况下)。 使用Html.fromHtml()进行此操作。
这里的问题是google-或至少是url- 提供了 无效的 JSON
1,2。JSON库虽然没有完全拒绝无效的JSON,但仍以“好吧,让我们忽略这种\废话并继续”的方式对其进行解析。也就是说,错误的不是
渲染 ,而是错误的 输入 。
1它 不 允许\x
在一个字符串(出现 除了
如果\
是本身逸出)如\
(当没有逃脱)只能和随之的小的字符集(其不包括x
)。字符代码的转义必须由\u1234
而不是\x12
。
我能想到的唯一“修补程序”确实是骇人听闻的骇客:例如,读取原始文本并转换\x12
为\u0012
。(实际上,这不是 说
一个黑客不好,因为没有上下文敏感的东西需要被考虑;但是,它应该 不会 !需要可耻的是谷歌)
2提取了 无效的 JSON字符串文字:
“苹果公司(纳斯达克股票代码:AAPL)的股票今年继续领跑大盘科技股,表现最佳。在周一开始的关键事件之后,该股票的价格没有太大变化。”
(要使其有效,请替换\x26
为\u0026
或&
。)
祝您编程愉快,祝您好运:)
在Java中,一种[未经测试]的方法可能是使用正则表达式(通过String.replaceAll
):
inputString.replaceAll("\\x(\d{2})", "\\u00$1")
问题内容: 我正在寻找一个内置Java函数,例如可以将其转换为。 像这样: 还是我必须手动搜索并替换所有转义字符? 问题答案: 您可以从Apache Commons Lang使用 。它适用于所有转义序列,包括Unicode字符(即)。 https://commons.apache.org/lang/apidocs/org/apache/commons/lang3/StringEscapeUtils
我有一个输入json字符串,其中包含几个已经转义的特殊字符和一些未转义的特殊字符(如en-dash/em-dash)。解析此json字符串(需要解析此字符串以检索对象数组)后,它将具有特殊字符的字符串转换为Unicode值(例如,将短划线字符转换为2013)。我的要求是不要转义任何特殊字符,并保持其他已转义字符不变。简单来说,在解析JSON字符串后,内容不应更改。 请建议一些方法来处理这个问题。
我正在编写一个C库,用于在不同格式/编解码器之间对音频进行解码和编码。在加载所需的编解码器库之前,我有一个快速检测格式的例程。 对于WAV文件,可以在文件开头简单查找ASCII值“RIFF”和“WAVE”。这同样适用于FLAC,我们可以简单地读取前4个字节,即“FLAC”。 但是如何快速检测文件是否是MP3?我不能依赖文件扩展名。我也无法尝试解码第一个MP3帧,因为文件开头可能有其他数据(例如:I
问题内容: 我正在尝试从JSON文件解析数据。我试图将已解析/获取的数据放入带有标签的UIView或Webview中。JSON文件如下所示: 在上有一些帖子,展示了如何解析从WebURL检索到的JSON,但实际上我已经有一个要解析的JSON文件。如何从文件解析JSON? 问题答案: 创建空的文本文件(新文件/其他/空),例如“ example.json” 将json字符串粘贴到文件中。 使用以下行
问题内容: 我想解析,但是安全吗? 我应该如何打开文件并从中读取文件,不要害怕其他一些进程(或操作系统本身)会在同一时间对其进行更改? 问题答案: 一般来说,没有。 (因此,这里的大多数答案都是错误的。)根据您想要的属性,它 可能 是安全的。但是,如果您过多地假设中的文件一致性,则很容易在代码中导致错误。例如,请查看此错误,该错误来自假设它是一致的快照。 例如: 有人在另一个答案中提到过,这 完全