2

注: これに関するその他の回答については、Google 電卓の特殊文字を参照してください。

Google 電卓の計算の戻り値を取得しているときに、千の位が奇妙な文字で区切られていることに気付きました。単なる空間ではありません。

$4,000 USD を GBP に変換する例を見てみましょう。

次の 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 が私に何を渡しているかについて、誰かが私に洞察を与えることができますか?

4

3 に答える 3

3

これは非改行スペース、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 として再解釈された可能性があります。
  • あなたの短剣 (†) などのまったく異なる文字がある場合、応答は 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
...

また、応答ヘッダーをざっと見てみると、エンコーディングが正しく設定されていることがわかりました。

于 2012-10-10T20:44:05.883 に答える
2

OSXcurlターミナルでの私のテストによると、ターミナルの設定で国際文字エンコーディングを変更することによって: エンコーディングは 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'

2番目の解決策:使用iconv

curl -s 'http://www.google.com/ig/calculator?hl=en&q=4000%20usd%20to%20gbp' |  iconv -t utf8 -f  iso-8859-1
于 2012-10-10T23:47:49.310 に答える
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/[†]/,/'"
于 2012-10-10T20:36:34.557 に答える