JAVA 는 URL 클래스 openStream 의 한 경로 에서 파일 이름 이 중국어 인 문 제 를 사용 합 니 다.
7357 단어 자바
publich void test(){
url = encodeURLChinese(url);
}
/**
* URL
*
* @param url
* @return
*/
public static String encodeURLChinese(String url) {
if (StringUtils.isEmpty(url)) {
return null;
}
url = StringUtils.trim(url);
try {
if (!needEncoding(url)) {
//
return url;
} else {
//
String allowChars = ".!*'();:@&=+_\\-$,/?#\\[\\]{}|\\^~`<>%\"";
// String allowChars = ".!*'();:@&=+_\\-$,/?#\\[\\]{}|\\^~`<>%\"";
// UTF-8
return encode(url, ENCODE_FORMAT_UTF8, allowChars, false);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* url ,
*
* @param url
* @return
*/
public static boolean needEncoding(String url) {
//
// String allowChars = SystemConfig.getValue("ENCODING_ALLOW_REGEX",
// Constants.ENCODING_ALLOW_REGEX);
if (url.matches("^[0-9a-zA-Z.:/?=&%~`#()-+]+$")) {
return false;
}
return true;
}
/**
*
*
* @param s
*
* @param enc
*
* @param allowed
*
* @param lowerCase
* true: false:
* @return
* @throws java.io.UnsupportedEncodingException
*/
public static final String encode(String s, String enc, String allowed,
boolean lowerCase) throws UnsupportedEncodingException {
byte[] bytes = s.getBytes(enc);
int count = bytes.length;
/*
* From RFC 2396:
*
* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" reserved =
* ";" | "/" | ":" | "?" | "@" | "&" | "=" | "+" | "$" | ","
*/
// final String allowed = "=,+;.'-@&/$_()!~*:"; // '?' is omitted
char[] buf = new char[3 * count];
int j = 0;
for (int i = 0; i < count; i++) {
if ((bytes[i] >= 0x61 && bytes[i] <= 0x7A) || // a..z
(bytes[i] >= 0x41 && bytes[i] <= 0x5A) || // A..Z
(bytes[i] >= 0x30 && bytes[i] <= 0x39) || // 0..9
(allowed.indexOf(bytes[i]) >= 0)) {
buf[j++] = (char) bytes[i];
} else {
buf[j++] = '%';
if (lowerCase) {
buf[j++] = Character.forDigit(0xF & (bytes[i] >>> 4), 16);
buf[j++] = Character.forDigit(0xF & bytes[i], 16);
} else {
buf[j++] = lowerCaseToUpperCase(Character.forDigit(
0xF & (bytes[i] >>> 4), 16));
buf[j++] = lowerCaseToUpperCase(Character.forDigit(
0xF & bytes[i], 16));
}
}
}
return new String(buf, 0, j);
}
public static char lowerCaseToUpperCase(char ch) {
if (ch >= 97 && ch <= 122) { //
ch = (char) (ch - 32);
}
return ch;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.