V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
elboble
V2EX  ›  编程

日语 urlencode 问题?

  •  
  •   elboble · 2022-02-07 19:55:55 +08:00 · 1731 次点击
    这是一个创建于 807 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一组歌曲的路径,已经从文件系统导入到 mongodb 里。 后端 python 从 mongodb 读出来供 web js 读取。 发现有几首歌放不出,看后台 nginx 的日志是 404 ,找不到文件。 F12 把路径拷出来,肉眼看路径是对的,但是 urlencode 后和正确的确是有不同,不知道为啥? urlencode ,第一行可以读取,第二行报 404. 1.png 解码结果是一样的!!! 2.png

    猜测是 unicode 编码的问题,但是不确定怎么解决。

    第 1 条附言  ·  2022-02-08 08:42:33 +08:00
    同一个日语的字符串,urlencode 以后有两个表示,其中一个作为请求地址返回 404 了。

    180 天空の城ラピュタ サウンドトラック 飛行石の謎 - Joe Hisaishi 1993//11%20 月光の雲海.mp3

    %E8%B1%86%E7%93%A3%E9%9F%B3%E4%B9%90top250/180%20%E5%A4%A9%E7%A9%BA%E3%81%AE%E5%9F%8E%E3%83%A9%E3%83%94%E3%83%A5%E3%82%BF%20%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%20%E9%A3%9B%E8%A1%8C%E7%9F%B3%E3%81%AE%E8%AC%8E%20-%20Joe%20Hisaishi%201993/11%20%E6%9C%88%E5%85%89%E3%81%AE%E9%9B%B2%E6%B5%B7.mp3

    %E8%B1%86%E7%93%A3%E9%9F%B3%E4%B9%90top250/180%20%E5%A4%A9%E7%A9%BA%E3%81%AE%E5%9F%8E%E3%83%A9%E3%83%92%E3%82%9A%E3%83%A5%E3%82%BF%20%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%88%E3%82%99%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%20%E9%A3%9B%E8%A1%8C%E7%9F%B3%E3%81%AE%E8%AC%8E%20-%20Joe%20Hisaishi%201993/11%20%E6%9C%88%E5%85%89%E3%81%AE%E9%9B%B2%E6%B5%B7.mp3
    9 条回复    2022-02-08 15:38:51 +08:00
    soudesuka
        1
    soudesuka  
       2022-02-07 20:09:54 +08:00
    我猜测是 文件路径 中的 ピ 和 ド 被拆解成 ヒ 与 ゚ 和 ト 与 ゙ 了吧。
    详见请搜索 Unicode equivalence
    lidlesseye11
        2
    lidlesseye11  
       2022-02-07 22:06:20 +08:00
    建议 lz 把文本贴上来。你这两张图片怎么搞。。
    ClericPy
        3
    ClericPy  
       2022-02-07 22:35:40 +08:00
    是 quote 和 quote_plus 的问题? 话说先搞明白是前端输入错误还是后端解码错误?

    提问题直接给例子吧

    输入: xxx, 期望: xxx, 错误: xxx
    imn1
        4
    imn1  
       2022-02-07 22:55:04 +08:00
    #1 +1
    ピ(30d4) 分解成 ヒ(30d2) 和 '゚' (309a)两个字符
    处理日语字符,这事情很常见,做个预案吧
    elboble
        5
    elboble  
    OP
       2022-02-08 08:44:30 +08:00
    如果是这样,是不是汉字 unicode 也存在这个问题。日语一点不懂,是不是应该存在一个通用的做法?
    sagaxu
        6
    sagaxu  
       2022-02-08 08:50:33 +08:00 via Android
    文件名和请求路径就不该出现[a-z0-9_]以外的字符,其它信息可以作为元数据存储在 db 里
    yogogo
        7
    yogogo  
       2022-02-08 09:10:23 +08:00
    用参数带文件名吧
    soudesuka
        8
    soudesuka  
       2022-02-08 10:34:34 +08:00
    Python 函数 unicodedata.normalize(form, unistr)
    返回 Unicode 字符串 unistr 的正常形式 form 。form 的有效值为 'NFC' 、 'NFKC' 、 'NFD' 和 'NFKD' 。

    NFC:Normalization Form Canonical Composition (以标准等价方式来分解,然后以标准等价重组之)
    NFD:Normalization Form Canonical Decomposition (以标准等价方式来分解)

    第一个路径 = unicodedata.normalize('NFC', 第二个路径)
    第二个路径 = unicodedata.normalize('NFD', 第一个路径)
    elboble
        9
    elboble  
    OP
       2022-02-08 15:38:51 +08:00
    @soudesuka 谢谢,收到,我再琢磨下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5412 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:44 · PVG 15:44 · LAX 00:44 · JFK 03:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.