日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java 中類似js encodeURIComponent 函數的實現案例

瀏覽:25日期:2022-08-23 09:32:54

我就廢話不多說了,大家還是直接看代碼吧~

import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder; /** * Utility class for JavaScript compatible UTF-8 encoding and decoding. * * @see http://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-output * @author John Topley */public class EncodingUtil { /** * Decodes the passed UTF-8 String using an algorithm that’s compatible with * JavaScript’s <code>decodeURIComponent</code> function. Returns * <code>null</code> if the String is <code>null</code>. * * @param s The UTF-8 encoded String to be decoded * @return the decoded String */ public static String decodeURIComponent(String s) { if (s == null) { return null; } String result = null; try { result = URLDecoder.decode(s, 'UTF-8'); } // This exception should never occur. catch (UnsupportedEncodingException e) { result = s; } return result; } /** * Encodes the passed String as UTF-8 using an algorithm that’s compatible * with JavaScript’s <code>encodeURIComponent</code> function. Returns * <code>null</code> if the String is <code>null</code>. * * @param s The String to be encoded * @return the encoded String */ public static String encodeURIComponent(String s) { String result = null; try { result = URLEncoder.encode(s, 'UTF-8') .replaceAll('+', '%20') .replaceAll('%21', '!') .replaceAll('%27', '’') .replaceAll('%28', '(') .replaceAll('%29', ')') .replaceAll('%7E', '~'); } // This exception should never occur. catch (UnsupportedEncodingException e) { result = s; } return result; } /** * Private constructor to prevent this class from being instantiated. */ private EncodingUtil() { super(); }}

補充知識:java 代碼實現encodeURIComponent和decodeURIComponent,解決空格轉義為加號的問題

java自帶有一個 java.net.URLDecoder和java.net.URLEncoder。

通過這兩個類,可以調用encode()或者decode()方法對字符串進行URL編碼。

那既然有了,為什么還要自己實現一套呢?主要原因是Jdk中并沒有提供encodeURIComponent和decodeURIComponent的方法。

這兩個方法作用其實跟encode()和decode()基本相似。區別主要是,在java中,url編碼時,會把空格轉換成+號。而某些非java語言實現的客戶端一般空格轉義出來是 %20 ,這樣就容易發生decode不出這個空格的問題。比如IOS中,會把這個+直接顯示了,而不是轉義成空格。這就跟我們想要的結果違背了。比如js中就自帶有encodeURIComponent和decodeURIComponent的方法。

java我們就自己實現一下吧。直接看代碼,一看就明白。

/* * 文件名:URIEncode.java 描述: 修改人:gogym 修改時間:2018年11月16日 跟蹤單號: 修改單號: 修改內容: */ import java.io.UnsupportedEncodingException; public class URIEncoder{ public static final String ALLOWED_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*’()'; /** * Description: * * @param str * @return * @throws UnsupportedEncodingException * @see */ public static String encodeURI(String str) throws UnsupportedEncodingException { String isoStr = new String(str.getBytes('UTF8'), 'ISO-8859-1'); char[] chars = isoStr.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < chars.length; i++ ) { if ((chars[i] <= ’z’ && chars[i] >= ’a’) || (chars[i] <= ’Z’ && chars[i] >= ’A’)|| chars[i] == ’-’ || chars[i] == ’_’ || chars[i] == ’.’ || chars[i] == ’!’|| chars[i] == ’~’ || chars[i] == ’*’ || chars[i] == ’’’ || chars[i] == ’(’|| chars[i] == ’)’ || chars[i] == ’;’ || chars[i] == ’/’ || chars[i] == ’?’|| chars[i] == ’:’ || chars[i] == ’@’ || chars[i] == ’&’ || chars[i] == ’=’|| chars[i] == ’+’ || chars[i] == ’$’ || chars[i] == ’,’ || chars[i] == ’#’|| (chars[i] <= ’9’ && chars[i] >= ’0’)) {sb.append(chars[i]); } else {sb.append('%');sb.append(Integer.toHexString(chars[i])); } } return sb.toString(); } /** * Description: * * @param input * @return * @see */ public static String encodeURIComponent(String input) { if (null == input || ''.equals(input.trim())) { return input; } int l = input.length(); StringBuilder o = new StringBuilder(l * 3); try { for (int i = 0; i < l; i++ ) {String e = input.substring(i, i + 1);if (ALLOWED_CHARS.indexOf(e) == -1){ byte[] b = e.getBytes('utf-8'); o.append(getHex(b)); continue;}o.append(e); } return o.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return input; } private static String getHex(byte buf[]) { StringBuilder o = new StringBuilder(buf.length * 3); for (int i = 0; i < buf.length; i++ ) { int n = (int)buf[i] & 0xff; o.append('%'); if (n < 0x10) {o.append('0'); } o.append(Long.toString(n, 16).toUpperCase()); } return o.toString(); }}

/* * 文件名:URIDecode.java 描述: 修改人:gogym 修改時間:2018年11月16日 跟蹤單號: 修改單號: 修改內容: */ package com.poly.rbl.plugin.uri; public class URIDecoder{ /** * * Description: * * @param encodedURI * @return * @see */ public static String decodeURIComponent(String encodedURI) { char actualChar; StringBuffer buffer = new StringBuffer(); int bytePattern, sumb = 0; for (int i = 0, more = -1; i < encodedURI.length(); i++ ) { actualChar = encodedURI.charAt(i); switch (actualChar) {case ’%’:{ actualChar = encodedURI.charAt(++i); int hb = (Character.isDigit(actualChar) ? actualChar - ’0’ : 10 + Character.toLowerCase(actualChar) - ’a’) & 0xF; actualChar = encodedURI.charAt(++i); int lb = (Character.isDigit(actualChar) ? actualChar - ’0’ : 10 + Character.toLowerCase(actualChar) - ’a’) & 0xF; bytePattern = (hb << 4) | lb; break;}case ’+’:{ bytePattern = ’ ’; break;}default:{ bytePattern = actualChar;} } if ((bytePattern & 0xc0) == 0x80) { // 10xxxxxxsumb = (sumb << 6) | (bytePattern & 0x3f);if (--more == 0) buffer.append((char)sumb); } else if ((bytePattern & 0x80) == 0x00) { // 0xxxxxxxbuffer.append((char)bytePattern); } else if ((bytePattern & 0xe0) == 0xc0) { // 110xxxxxsumb = bytePattern & 0x1f;more = 1; } else if ((bytePattern & 0xf0) == 0xe0) { // 1110xxxxsumb = bytePattern & 0x0f;more = 2; } else if ((bytePattern & 0xf8) == 0xf0) { // 11110xxxsumb = bytePattern & 0x07;more = 3; } else if ((bytePattern & 0xfc) == 0xf8) { // 111110xxsumb = bytePattern & 0x03;more = 4; } else { // 1111110xsumb = bytePattern & 0x01;more = 5; } } return buffer.toString(); }}

以上這篇java 中類似js encodeURIComponent 函數的實現案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人久久| 中文字幕成人| 99久久久久久中文字幕一区| 欧美日韩激情| 亚洲免费一区三区| 国产乱码精品一区二区亚洲| 欧美成人a交片免费看| 亚洲黄色影院| 国产精品调教| 99精品综合| 日韩高清国产一区在线| 国产成人1区| 亚洲免费婷婷| 国产精品17p| 日韩精品网站| 日本伊人久久| 日韩精品一区二区三区免费观影| 综合视频一区| 日韩中文字幕高清在线观看| 免费视频一区二区| 国产成年精品| 日韩欧美激情| 日韩另类视频| 欧美亚洲tv| 欧美美女一区| 久久99精品久久久久久园产越南| 欧美日韩国产综合网| 国产精品一区亚洲| 亚洲精品一区二区妖精| 国产精品v日韩精品v欧美精品网站| 日韩免费福利视频| 日韩中文字幕| 99精品网站| 久久天堂影院| 亚洲1区在线观看| 三级在线看中文字幕完整版| 日本在线视频一区二区| 久久国产电影| 国产精品成人一区二区网站软件| 国产农村妇女精品一二区| 国际精品欧美精品| 午夜久久av| 国产精品av久久久久久麻豆网| 国产精品一区二区免费福利视频 | 四虎精品一区二区免费| 亚洲人成在线网站| 国产日韩欧美三级| 视频在线观看一区| 欧美亚洲精品在线| 精品国产一级| 日韩精品国产精品| 欧美日韩国产在线一区| 超碰成人av| 国产日韩亚洲| 日韩精品五月天| 玖玖玖国产精品| 欧美色图国产精品| 久草精品视频| 国产色噜噜噜91在线精品| 亚洲制服欧美另类| 黄页网站一区| 欧美日韩尤物久久| 成人日韩av| 国产精品qvod| 欧美亚洲一区二区三区| 亚洲视频电影在线| 免费国产自线拍一欧美视频| 亚洲韩日在线| 久久久国产精品一区二区中文| 国产成人精品999在线观看| 国产精品99久久免费| 国产毛片一区二区三区| 亚洲日韩视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美福利在线| 黑丝美女一区二区| 亚洲福利免费| 欧美 日韩 国产一区二区在线视频| 欧美一级鲁丝片| 中文字幕在线官网| 日韩久久精品| 欧洲av一区二区| 久久天堂精品| 久久国产影院| 99久久久久| 在线日韩av| 蜜桃tv一区二区三区| 免费福利视频一区二区三区| 国产不卡av一区二区| 黑人精品一区| 日韩久久精品网| 亚洲天堂1区| 欧美+亚洲+精品+三区| 国产高清一区| 丝袜亚洲另类欧美| 中文字幕av亚洲精品一部二部| 亚洲天堂免费| 日韩中文字幕无砖| 久久激情五月婷婷| 国产精品久久久久久久久久久久久久久 | 国产精品97| 欧美高清不卡| 亚洲欧美日韩精品一区二区| 免费人成在线不卡| 日韩精品成人在线观看| 日本午夜精品久久久| 日本不卡的三区四区五区| 日韩国产一二三区| 国产精品欧美在线观看| 美女精品视频在线| 国产一区二区三区不卡av | 国产精品调教| 国产一区二区久久久久| 欧美成人a交片免费看| 久久国产精品成人免费观看的软件| 亚洲一级二级| 中文精品在线| 三级一区在线视频先锋| 日本不卡高清视频| 国产极品模特精品一二| 九九久久国产| 久久狠狠婷婷| 久久亚洲风情| 国产欧美日韩影院| 黑人精品一区| 亚洲欧美日韩一区在线观看| 欧美亚洲综合视频| 成午夜精品一区二区三区软件| 久久久9色精品国产一区二区三区| 亚洲免费影视| 91成人精品观看| 粉嫩av一区二区三区四区五区 | 欧美亚洲网站| 精品少妇av| 激情丁香综合| 日韩精品视频在线看| 久久精品国产68国产精品亚洲| 久久中文字幕av| 91久久在线| 亚洲一级大片| 日韩精品视频中文字幕| 国产日产一区| 在线中文字幕播放| 亚洲欧美日韩国产综合精品二区| 国产麻豆一区二区三区精品视频| 黄色aa久久| 天堂成人免费av电影一区 | 欧美日韩国产精品一区二区亚洲| 精品欧美激情在线观看| 日韩中文字幕麻豆| 欧美一区自拍| 国产精品毛片久久| 91精品福利| 免费在线观看成人| 国产在线视频欧美一区| 免费久久精品| 欧美精品中文| 亚洲国产日韩欧美在线| 国产欧美一区二区三区精品观看| 神马午夜久久| 日韩视频二区| 欧美日韩va| 亚洲www啪成人一区二区| 免费观看在线综合色| 青青在线精品| 欧美日韩视频免费观看| 免费在线观看成人| 亚洲一区成人| 欧美精品1区| 亚洲一级二级| 国产日韩欧美在线播放不卡| 久久久久99| 国产精品一级| 日韩午夜黄色| 国产成人精品亚洲线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 激情综合激情| 久久中文字幕av一区二区不卡| 少妇高潮一区二区三区99| 国产一区二区三区四区| 男人天堂欧美日韩| 免费一级欧美片在线观看网站| 欧美国产91| 日韩精品免费观看视频| 伊人久久在线| 日韩黄色在线观看| 免费在线小视频| 欧美日韩国产在线观看网站 | 亚洲视频二区| 久久要要av| 国产成人精选| 国产精品亚洲成在人线| 性一交一乱一区二区洋洋av| 国产 日韩 欧美 综合 一区| 欧美午夜三级| 中文字幕日韩亚洲| 亚洲精品一区二区在线看| 少妇精品导航| av高清不卡| 久久久久久自在自线|