谷歌计算器数千分隔符特殊字符

时间:2012-10-10 20:27:16

标签: unicode google-api calculator separator

注意:有关此问题的更多答案,请参阅 Special Characters in Google Calculator

我注意到在抓取Google Calculator计算的返回值时,数千个位置由一个相当奇怪的字符分隔。它不仅仅是一个空间。

我们举一个将4,000美元兑换成英镑的例子。

如果您访问以下Google链接:

http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp

你会注意到答案是:

{lhs: "4000 U.S. dollars",rhs: "2 497.81441 British pounds",error: "",icc: true}

这看起来很合理,数千个地方似乎被空白字符分开。

但是,如果在命令行中输入以下内容:

curl -s "http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp"

你会注意到答案是:

{lhs: "4000 U.S. dollars",rhs: "2?498.28243 British pounds",error: "",icc: true}

该问号(?)是替换字符。发生了什么事?

AppleScript会返回不同的替换字符:

{lhs: "4000 U.S. dollars",rhs: "2†498.28243 British pounds",error: "",icc: true}

我也是从其他来源获得的:

{lhs: "4000 U.S. dollars",rhs: "2�498.28243 British pounds",error: "",icc: true}

事实证明, 是正确的Unicode替换字符65533。

有人能让我了解谷歌传递给我的信息吗?

3 个答案:

答案 0 :(得分:3)

这是一个不间断的空间,U + 00A0。这是为了确保数字不会在一行结束时被破坏。

Google会返回正确的编码(UTF-8):

Content-Type: text/html; charset=UTF-8

所以......

  • 如果它作为普通空间(U + 0020)出现(Firefox在复制时就这样做了,那就足够愚蠢),那么应用程序会将某些字符转换为相似的字符,可能适合某种受限制的代码页( ASCII也许)。
  • 如果有问号,则将其正确读取为Unicode,但处理中的某些部分使用不包含该字符的旧字符集,以便进行转换。
  • 如果有替换字符 (U + FFFD),那么它很可能被读作UTF-8,转换为包含该字符的遗留字符集(例如拉丁语1),然后重新解释为UTF-8。
  • 如果有一个完全不同的字符,例如你的匕首(†),那么我猜测响应被正确读取为Unicode,转换为包含该字符的字符集并在另一个字符集中重新解释。快速查看Mac Roman代码页会发现A0确实映射到†。

毋庸置疑,在处理响应时使用的任何部分在Unicode方面似乎都是可怕的。我希望通常在这个千年中不会发生的事情,但显然它仍然存在。


我想通过在PowerShell中摆弄一下来弄清楚它是什么:

PS Home:\> $wc = new-object net.webclient
PS Home:\> $x = $wc.downloadstring('http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp')
PS Home:\> [char[]]$x|%{"$_ - " + +$_}
...
" - 34
2 - 50
  - 160
4 - 52
9 - 57
8 - 56
. - 46
2 - 50
8 - 56
2 - 50
4 - 52
...

另外,快速查看响应标头显示编码设置正确。

答案 1 :(得分:2)

根据我在OSX上终端中的curl测试,通过更改终端首选项中的国际字符编码:编码为iso latin 1

当我将编码设置为UTF8时:我得到“2?498.28243”

当我将编码设置为MacRoman时:我得到“2†498.28243”

第一个解决方案:从任何浏览器使用用户代理(本例中OSX 10.6.8上的Safari)

curl -s -A 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.48 (KHTML, like Gecko) Version/5.1 Safari/534.48' 'http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp'

第二个解决方案:使用iconv

curl -s 'http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp' |  iconv -t utf8 -f  iso-8859-1

答案 2 :(得分:0)

尝试

set myUrl to quoted form of "http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp"
set xxx to do shell script "curl " & myUrl & " | sed 's/[†]/,/'"