标题:请教VFP 里encodeURI来解决URL传递时的中文问题
只看楼主
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
结帖率:56.36%
已结贴  问题点数:5 回复次数:10 
请教VFP 里encodeURI来解决URL传递时的中文问题
请教,现在一个地址带了中文无法下载文件,比如
http://127.0.0.1:9880/chfs/shared/eqpt_file/202305/C6B9##QQ图片20220824145938.jpg
转换成就可以
http://127.0.0.1:9880/chfs/shared/eqpt_file/202305/C6B9%23%23QQ%E5%9B%BE%E7%89%8720220824145938.jpg
VFP用什么方式转换呢

[此贴子已经被作者于2023-5-8 13:05编辑过]

搜索更多相关主题的帖子: 中文 传递 jpg URL VFP 
2023-05-08 13:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:2 
对楼主是否有帮助
* 只对双字节字符编(解)码_UTF8编码;
* 还有一种常用的GB2312编码,方法逐个取双字节符用 TRANSFORM() 进行转换。
* cc = RIGHT(TRANSFORM(ASC("中"), "@0"), 4)
* 还原:CHR(EVALUATE("0x" + cc))
CLEAR
lcPath = JUSTPATH(SYS(16))

lc = "西安音12乐学院"
? lc
\*****************************************
\ URL编码
? UrlEncode(lc)
\ URL解码
? UrlDecode(UrlEncode(lc))
? UrlDecode("%E8%A5%BF%E5%AE%89%E9%9F%B3%E4%B9%90%E5%AD%A6%E9%99%A2")
STRTOFILE(UrlEncode(lc), "BM.TXT")
MODIFY FILE BM.TXT


* URL编码
FUNCTION UrlEncode(cStr)
    LOCAL lcValue, lcEnStr, lc, lnJ, lnK
    lcEnStr = ""
    FOR lnJ = 1 TO LEN(cStr)
        lc = SUBSTR(cStr, lnJ, 1)
        IF ISLEADBYTE(lc)
            lc = SUBSTR(cStr, lnJ, 2)
            lnJ = lnJ + 1
            lcValue = STRCONV(STRCONV(lc, 9), 15)
            FOR lnK = 1 TO LEN(lcValue) STEP 2
                lcEnStr = lcEnStr + "%" + SUBSTR(lcValue, lnK, 2)
            ENDFOR
        ELSE
            lcEnStr = lcEnStr + lc
        ENDIF
    ENDFOR
    RETURN lcEnStr
ENDFUNC
* URL解码
FUNCTION UrlDecode(cEncode)
    LOCAL lcStr, lnJ, laCode[1]
    lcStr = ""
    FOR lnJ = 1 TO ALINES(laCode, cEncode, 5, "%") STEP 3
        lcStr = lcStr + STRCONV(STRCONV(laCode[lnJ] + laCode[lnJ + 1] + LEFT(laCode[lnJ + 2], 2), 16), 11) + SUBSTR(laCode[lnJ + 2], 3)
    ENDFOR
    RETURN lcStr
ENDFUNC

坚守VFP最后的阵地
2023-05-08 13:17
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
真历害,用你发的运行了了结果基本一至了,就差了把#转换成%23
UrlEncode('BF82##发票开具项目信息导入模板.xlsx')
这是用你发的UrlEncode(cStr)转出来的结果,
BF82##%E5%8F%91%E7%A5%A8%E5%BC%80%E5%85%B7%E9%A1%B9%E7%9B%AE%E4%BF%A1%E6%81%AF%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx
真实好用的结果要这样
BF82%23%23%E5%8F%91%E7%A5%A8%E5%BC%80%E5%85%B7%E9%A1%B9%E7%9B%AE%E4%BF%A1%E6%81%AF%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx
查询了资料有这些字符规定
2023-05-08 13:42
foxfans
Rank: 4
等 级:贵宾
威 望:11
帖 子:90
专家分:278
注 册:2021-10-23
得分:2 
urlDecode可以考虑用Vfp自带函数来解码,避免循环提升效率
?STRCONV(STRCONV("%E8%A5%BF%E5%AE%89%E9%9F%B3%E4%B9%90%E5%AD%A6%E9%99%A2",16),11)
2023-05-08 14:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
,,,,,,,,,,,,,,,,,,,

[此贴子已经被作者于2023-5-8 14:40编辑过]


坚守VFP最后的阵地
2023-05-08 14:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
? UrlEncode("##QQ图片")

坚守VFP最后的阵地
2023-05-08 14:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
这个应该能满足要求吧
CLEAR
SET TALK OFF
lcString = "BF82##发票开具项目信息导入模板.xlsx"
oJS = CreateObject("MSScriptControl.ScriptControl")
oJS.Language = "javascript"
\*!* 编码
?oJs.eval([javascript:encodeURI('] + lcString + [')])
\*!* 解码
?oJs.eval("javascript:decodeURI('%E6%98%8E%E5%AA%9A%E3%81%AE%E5%93%80%E5%82%B7')")
release oJS

坚守VFP最后的阵地
2023-05-08 14:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:2 
也可以调用JS的encodeURI()和encodeURIComponent()

两者对httpURL中的预留符号编译的结果


两者都不会对[a-zA-Z0-9]的字符以及!*()'.进行编码,即编码之后还是本身。
两者对中文的解析结果是一样的。

decodeURI()和decodeURIComponent()是对应的解码函数
2023-05-08 14:51
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 8楼 吹水佬
调用JS的encodeURI()和encodeURIComponent()
这种方法也不错具体代码如何写呢?
2023-05-08 21:04
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:205
专家分:31
注 册:2010-12-23
得分:0 
回复 7楼 sdta
lcString = "BF82##发票开具项目信息导入模板.xlsx" 用oJs.eval([javascript:encodeURI('] + lcString + [')])方法解析出来是下面这样,二个##没有做转换,其他对的
BF82##%E5%8F%91%E7%A5%A8%E5%BC%80%E5%85%B7%E9%A1%B9%E7%9B%AE%E4%BF%A1%E6%81%AF%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx
正确转换要这样
BF82%23%23%E5%8F%91%E7%A5%A8%E5%BC%80%E5%85%B7%E9%A1%B9%E7%9B%AE%E4%BF%A1%E6%81%AF%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx
2023-05-08 21:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-512133-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.897528 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved