gpt4 book ai didi

xml - 在 Perl 中转义 URL 和 UTF-8

转载 作者:行者123 更新时间:2023-12-04 02:24:34 25 4
gpt4 key购买 nike

我正在尝试访问一个从 Perl 脚本返回 .xml 的在线 API,它使用加泰罗尼亚语字母表:à,é,è,í,ò,ó,ú,·,ç 。

我正在使用 Perl 的 URI::Escape,所以我正在尝试做的事情的“MWE”(没有我试图访问的字典的实际 URL,以防万一它被认为是垃圾邮件或其他什么)将是

use LWP::Simple;
use URI::Escape;
use utf8;

my $word = <STDIN>;
$word = uri_escape_utf8($word);
my $xmlweb = get("http://www.urlofthedictionary.com/search?q=$word&format=text/xml");

它“有效”,即没有出现错误,但它不能正常工作(如果该词包含任何这些特殊字符,则不会给出该词的结果)。例如,如果我写 país 然后 uri_escape_utf8() 返回 pa%C2%A1s%0A ,但我已经看到如果我完全复制与我的导航器中的 url 相同的字符串,然后它搜索 pais(而不是 país)没有给出任何结果,甚至在 URL 中它也被“翻译”为 派斯。如果我只使用 uri_escape() 那么网站会报错:操作“=”的排序规则 (latin1_swedish_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 的非法混合

这让我抓狂,我总是遇到编码问题。有人知道我做错了什么吗?如果需要词典的 url,我会提供,没问题。

最佳答案

问题 1。您忘记删除(chomp)结尾的换行符 (%0A)。


问题 2。uri_escape_utf8 需要 Unicode 代码点,但我认为您没有提供它。您需要解码从 STDIN 获得的内容。您可以使用:

use encoding ':std', ':encoding(cp850)';

850 是从 chcp 的输出中获得的。对您来说可能有所不同。


$ perl -MURI::Escape=uri_escape_utf8 -E'
say uri_escape_utf8 "pa\N{LATIN SMALL LETTER I WITH ACUTE}n";
'
pa%C3%ADn

关于xml - 在 Perl 中转义 URL 和 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23791691/

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