gpt4 book ai didi

unicode - Google 计算器千位分隔符特殊字符

转载 作者:行者123 更新时间:2023-12-02 22:26:57 24 4
gpt4 key购买 nike

注意:更多与此相关的答案,请看 Special Characters in Google Calculator

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

让我们以将 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。

任何人都可以让我深入了解 Google 传递给我的信息吗?

最佳答案

这是一个不间断的空格,U+00A0。这是为了确保数字不会在行尾被打断。

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

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

所以...

  • 如果它以普通空格 (U+0020) 的形式出现(Firefox 在复制时这样做,够愚蠢),那么应用程序会将某些字符转换为相似字符,可能是为了适应某种受限代码页(可能是 ASCII)。
  • 如果有问号,则它被正确读取为 Unicode,但处理中的某些部分使用了不包含该字符的旧字符集,因此它被转换。
  • 如果有替换字符 � (U+FFFD),则它可能被读取为 UTF-8,转换为包含该字符的旧字符集(例如 Latin 1),然后重新解释为 UTF-8。
  • 如果有一个完全不同的字符,比如你的 Dagger (†),那么我猜响应被正确读取为 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
...

另外,快速查看响应 header 会发现编码设置正确。

关于unicode - Google 计算器千位分隔符特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12827781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com