首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使drakma能够处理URL中非拉丁字符

如何使drakma能够处理URL中非拉丁字符
EN

Stack Overflow用户
提问于 2013-06-02 21:58:32
回答 2查看 393关注 0票数 3

我遇到一个错误,该错误是由使用sbcl的给定url中使用的非拉丁-1字符引起的,例如:

代码语言:javascript
复制
(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将报头定义为以拉丁文-1发送(这是我在遇到此错误后在github打开的工单),因此在传递给drakma之前必须对URL进行正确编码。但我不知道如何做到这一点,因为显然这是不可能的(因为它不是拉丁-1字符)。

我的示例的工作调用是什么(除了URL是假的,并且可以缩短为http://www.youtube.com)?

代码语言:javascript
复制
(drakma:http-request (magic-encoding-function "http://www.youtube.com/„weird-url"))
EN

回答 2

Stack Overflow用户

发布于 2013-06-02 23:38:54

这个问题与DRAKMA无关。这是普瑞的错。我使用我的PURI分支:https://github.com/archimag/puri-unicode

票数 2
EN

Stack Overflow用户

发布于 2018-02-13 21:46:56

刚刚弄清楚,如果缺陷存在于新实例化对象的后处理中,那么解决方法可能是将进程分成两部分:

  1. 仅使用拉丁语-1部分构造URI。
  2. 设置路径

它将如下所示:

(let ((uri (puri:uri "https://wikimedia.org"))) (setf (puri:uri-path uri) (concatenate 'string "/" (drakma:url-encode "/кадабра" :utf-8))) uri)产生:

代码语言:javascript
复制
#<PURI:URI https://wikimedia.org/%D0%BA%D0%B0%D0%B4%D0%B0%D0%B1%D1%80%D0%B0>

然后,Drakma接受这个URI,而不需要任何额外的处理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16883439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档