3

sbcl を使用して特定の URL で非ラテン 1 文字が使用されているためにエラーが発生しました。

(drakma:http-request "http://www.youtube.com/„weird-url")

debugger invoked on a FLEXI-STREAMS:EXTERNAL-FORMAT-ENCODING-ERROR in thread
#<THREAD "initial thread" RUNNING {1002998D23}>:
  #\DOUBLE_LOW-9_QUOTATION_MARK (code 8222) is not a LATIN-1 character.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(FLEXI-STREAMS::SIGNAL-ENCODING-ERROR
 #<FLEXI-STREAMS::FLEXI-LATIN-1-FORMAT (:ISO-8859-1 :EOL-STYLE :LF)
   {1002F196E3}>
 "~S (code ~A) is not a LATIN-1 character."
 #\DOUBLE_LOW-9_QUOTATION_MARK
 8222)

どうやらヘッダーは RFC2616 によって Latin-1 で送信されるように定義されているため(これは、このエラーが発生した後に github で開いたチケットです)、そのため、drakma に渡す前に URL を適切にエンコードする必要があります。しかし、明らかに不可能なので (LATIN-1 文字ではないため) どうすればよいのかわかりません。

私の例の有効な呼び出しは何ですか (URL が偽物であり、http://www.youtube.comに短縮できるという事実以外に)?

(drakma:http-request (magic-encoding-function "http://www.youtube.com/„weird-url"))
4

2 に答える 2

2

この問題は DRAKMA には関係ありません。せいぷりです。私は PURI のフォークを使用しています: https://github.com/archimag/puri-unicode

于 2013-06-02T15:38:54.110 に答える