Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编码URL UTF8-shell脚本_Java_Bash_Shell - Fatal编程技术网

Java 编码URL UTF8-shell脚本

Java 编码URL UTF8-shell脚本,java,bash,shell,Java,Bash,Shell,我正在使用以下函数对bash脚本中的url/标题进行编码 urlencode() { # urlencode <string> old_lc_collate=$LC_COLLATE LC_COLLATE=C local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in

我正在使用以下函数对bash脚本中的url/标题进行编码

urlencode() {
    # urlencode <string>
    old_lc_collate=$LC_COLLATE
    LC_COLLATE=C

    local length="${#1}"
    for (( i = 0; i < length; i++ )); do
        local c="${1:i:1}"
        case $c in
            [a-zA-Z0-9.~_-]) printf "$c" ;;
            *) printf '%%%02X' "'$c" ;;
        esac
    done

    LC_COLLATE=$old_lc_collate
}
还使用以下java代码对相同的参数进行编码

URLEncoder.encode(video.getHeadline() , UTF_8_ENCODING).replace("+", "%20");
URLEncoder.encode(video.getHeadline() , UTF_8_ENCODING)
而out和bash是不同的

description=%D8%A7%D9%82%D8%AA%D8%AD%D9%85%D8%AA%20%D8%A7%D9%84%D9%82%D9%88%D8%A7%D8%AA%20%D8%A7%D9%84%D8%B9%D8%B1%D8%A7%D9%82%D9%8A%D8%A9%20%D8%AD%D9%8A%20%D8%A7%D9%84%D9%85%D9%86%D8%B5%D9%88%D8%B1%20%D8%BA%D8%B1%D8%A8%20%D8%A7%D9%84%D9%85%D9%88%D8%B5%D9%84%20%D8%B6%D9%85%D9%86%20%D8%AA%D9%82%D8%AF%D9%85%D9%87%D8%A7%20%D9%81%D9%8A%20%D8%A7%D9%84%D8%B3%D8%A7%D8%AD%D9%84%20%D8%A7%D9%84%D8%BA%D8%B1%D8%A8%D9%8A%20%D9%85%D9%86%20%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D8%A9%20%D8%AA%D9%85%D9%87%D9%8A%D8%AF%D8%A7%20%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D8%A7%D8%AF%D8%AA%D9%87%D8%A7%20%D9%85%D9%86%20%D8%AF%D8%A7%D8%B9%D8%B4.%20%D9%85%D9%86%20%D8%AC%D9%87%D8%A9%20%D8%A3%D8%AE%D8%B1%D9%89%20%D8%AE%D9%8A%D9%91%D8%B1%20%D8%B1%D8%A6%D9%8A%D8%B3%20%D8%A7%D9%84%D9%88%D8%B2%D8%B1%D8%A7%D8%A1%20%D8%A7%D9%84%D8%B9%D8%B1%D8%A7%D9%82%D9%8A%20%D8%AD%D9%8A%D8%AF%D8%B1%20%D8%A7%D9%84%D8%B9%D8%A8%D8%A7%D8%AF%D9%8A%20%D9%85%D8%B3%D9%84%D8%AD%D9%8A%20%D8%A7%D9%84%D8%AA%D9%86%D8%B8%D9%8A%D9%85%20%D8%A8%D9%8A%D9%86%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B3%D9%84%D8%A7%D9%85%20%D9%88%D8%A7%D9%84%D9%82%D8%AA%D9%84.


downloadurl=http%3A%2F%2FFmedia.myhomepage.com%2Fmedia%2Fvideos%2F2017%2F03%2F08%2FVT-142437WE-WEB-IRQ-MOSUL-PROGRESS-HAWAMDA_2017-03-08_14%3A28%3A12.mp4


title=%D8%A7%D9%84%D8%B9%D8%A8%D8%A7%D8%AF%D9%8A%20%D9%8A%D8%AE%D9%8A%D8%B1%20%D9%85%D8%B3%D9%84%D8%AD%D9%8A%20%D8%AF%D8%A7%D8%B9%D8%B4%20%D8%A8%D9%8A%D9%86%20%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B3%D9%84%D8%A7%D9%85%20%D9%88%D8%A7%D9%84%D9%82%D8%AA%D9%84

请告知我如何在bash中提供与bash shell中java.net.urlcoder.encode()对应的java相同的java输出。此oneliner依赖于
xxd
获取字符串的hextump,然后预先设置转义:

string="العبادي يخير مسلحي داعش بين الاستسلام والقتل"
echo $string | xxd -g 1 | cut -d' ' -f2-17 | sed 's/\([0-9a-f][0-9a-f]\) /%\1/g' | sed  -e ':a' -e 'N' -e '$!ba' -e 's/\n//g'
结果:

%8%a8%a7%8%8%8%a8%a8%a8%a8%a8%a7%a7%a7%d9%8%8%8%8%8%a8%8%d8%8%a8%8%8%a8%8%a8%8%a8%8%a8%a8%a8%a8%a8%a7%a7%a7%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%8%d9%d9%84%d9%82%d8aa%d9%84%0a


如果您只需要对数据进行url编码,以便稍后将其传递给
curl
(正如您在评论中提到的),我建议使用该选项让
curl
为您进行编码

例如:

title="Mačka"
url="http://google.com/?q=mačka"
curl -G example.com/?foo=bar --data-urlencode "title=$title" --data-urlencode "url=$url"
使请求类似于:

GET /?foo=bar&title=Ma%C4%8Dka&url=http%3A%2F%2Fgoogle.com%2F%3Fq%3Dma%C4%8Dka

注意使用
-G
强制使用
GET
方法;如果没有它,任何
--data-*
选项默认为
POST
方法和正文中的参数。

看起来你的标题和描述是多字节UTF-8序列,你能确认吗?是的,正确。你能调用外部命令吗(即
curl
)或者您仅限于普通bash?我需要对其进行编码,然后将其传递给curl命令
GET /?foo=bar&title=Ma%C4%8Dka&url=http%3A%2F%2Fgoogle.com%2F%3Fq%3Dma%C4%8Dka