Apache Common UrlValidator не поддерживает юникод.оповещение есть в наличии? - PullRequest
2 голосов
/ 21 июля 2010

я пытаюсь проверить URL. но UrlValidator не поддерживает Unicode. вот код

public static boolean isValidHttpUrl(String url) {
    String[] schemes = {"http", "https"};
    UrlValidator urlValidator = new UrlValidator(schemes);
    if (urlValidator.isValid(url)) {
        System.out.println("url is valid");
        return true;
    }
    System.out.println("url is invalid");
    return false;
}

String url = "ftp://hi.com";
boolean isValid = isValidHttpUrl(url);
assertFalse(isValid);

url = "http:// hi.com";
isValid = isValidHttpUrl(url);
assertFalse(isValid);

url = "http://hi.com";
isValid = isValidHttpUrl(url);
assertTrue(isValid);

// this is problem... it's not true... 
url = "http://안녕.com";
isValid = isValidHttpUrl(url);
assertTrue(isValid);

знаете ли вы какой-нибудь альтернативный юникод поддержки валидатора URL?

Я добавляю какой-то регистр ... http://seapy_hi.com неверен. Зачем? Underbar является допустимым доменом, почему недействительным?

Ответы [ 2 ]

4 голосов
/ 21 июля 2010

Он не поддерживает IDN. Вам нужно сначала конвертировать URL в Punycode. Попробуйте это,

  isValid = isValidHttpUrl(IDN.toASCII(url));
0 голосов
/ 21 июля 2010

Может существовать более поздний RFC, который заменяет этот, но технически говоря URL не поддерживают Unicode. RFC1738

В частности, соответствующий раздел:

Нет соответствующей графики US-ASCII:

URL пишутся только с печатные символы
Набор кодированных символов US-ASCII. шестнадцатеричные октеты 80-FF не
используется в US-ASCII, а октеты 00-1F и 6F шестнадцатеричное представляют
управляющие персонажи; это должно быть закодированный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...