2012-04-26 54 views
2

我在erlang中使用標準的httpc客戶端來發送/接收某些服務的請求。有時我在我的URL中有西里爾文路徑。我如何URL編碼西里爾URL?在Erlang和Cyrillic中的URL編碼

謝謝。

回答

2
~/erl$erl 
Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.8.5 (abort with ^G) 
1> Encoded = edoc_lib:escape_uri("абвгдеё"). 
"%c0%b0%c0%b1%c0%b2%c0%b3%c0%b4%c0%b5%c1%91" 
2> http_uri:decode(Encoded). 
[192,176,192,177,192,178,192,179,192,180,192,181,193,145] 

您可以使用list_to_binary作爲二進制使用。

1

我對edoc lib的escape_uri有些麻煩。

所以我最後寫一個使用UTF-8的工作原理:

https://stackoverflow.com/a/12648499/113112

https://gist.github.com/3796470

例。

Eshell V5.9.1 (abort with ^G) 

1> c(encode_uri_rfc3986). 
{ok,encode_uri_rfc3986} 

2> encode_uri_rfc3986:encode("абвгдеё"). 
"%d0%b0%d0%b1%d0%b2%d0%b3%d0%b4%d0%b5%d1%91" 

3> edoc_lib:escape_uri("абвгдеё"). 
"%c0%b0%c0%b1%c0%b2%c0%b3%c0%b4%c0%b5%c1%91" # output wrong: À°À±À²À³À´ÀµÁ‘