| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1075 人关注过本帖, 1 人收藏
标题:请教VFP 里encodeURI来解决URL传递时的中文问题
只看楼主 加入收藏
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
结帖率:58.02%
收藏(1)
已结贴  问题点数:5 回复次数:11 
请教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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册: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
帖 子:295
专家分:38
注 册: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: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:113
专家分:324
注 册:2021-10-23
收藏(1)
得分: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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
,,,,,,,,,,,,,,,,,,,

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


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

坚守VFP最后的阵地
2023-05-08 14:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册: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
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:2 
也可以调用JS的encodeURI()和encodeURIComponent()

两者对httpURL中的预留符号编译的结果
图片附件: 游客没有浏览图片的权限,请 登录注册


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

decodeURI()和decodeURIComponent()是对应的解码函数
2023-05-08 14:51
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 8楼 吹水佬
调用JS的encodeURI()和encodeURIComponent()
这种方法也不错具体代码如何写呢?
2023-05-08 21:04
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册: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
快速回复:请教VFP 里encodeURI来解决URL传递时的中文问题
数据加载中...
 
   



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

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