DecodeURIComponent доза не работает с URL

Эта проблема обычно чаще встречается на 64-битных машинах или с файлами размером более 1-2 ГБ и не имеет ничего общего с кучей пространства. Переключитесь на BufferedReader, он должен работать нормально,

BufferedReader br = new BufferedReader(new FileReader(filepath));
String line = "";
while((line=br.readLine())!=null)
{
    // do something
}
0
задан Farshad Rockwell 16 January 2019 в 22:37
поделиться

2 ответа

Прежде всего, не пишите свой собственный анализатор URL: используйте URL() , встроенный API канонического манипулирования URL, который позволит вам автоматически анализировать его URLSearchParams [ 1111]:

parsed = new URL("http://localhost:2531/members.aspx?Mcat=1&searchType=fname&fname=%u0645%u06cc%u0631%u0632%u0627")

parsed.searchParams.get("fname")
// returns "%u0645%u06cc%u0631%u0632%u0627"

decodeURIComponent(u.searchParams.get("searchType"))
// returns "fname"

decodeURIComponent(parsed.searchParams.get("fname"));
// Uncaught URIError: URI malformed

Ваша строка не была закодирована способом, совместимым с decodeURIComponent() , похоже, что генерирует escape(), который не работает:

decodeURIComponent(escape("میرزا"))
// Uncaught URIError: URI malformed

Вместо этого вы хотите использовать encodeURICompoenent()

decodeURIComponent(encodeURIComponent("میرزا"))
// "میرزا"

Итак, чтобы было ясно, все, что вы сделали для создания текста "%u0645%u06cc%u0631%u0632%u0627", неверно, вам нужно использование любого метода сгенерирует компонент URI, который будет выглядеть как "%D9%85%DB%8C%D8%B1%D8%B2%D8%A7". (Возможно, это не JavaScript, это не указано в вопросе.)

0
ответ дан 2 revs 16 January 2019 в 22:37
поделиться

Я нашел решение, URL имеет значение Unicode, и мне нужно только преобразовать его из Unicode в обычный текст, поэтому в этом случае decodeURIComponent действительно работает.

с помощью этой функции 'u0645 \ u06cc \ u0631 \ u0632 \ u0627' может преобразовываться в обычный текст.

    function unicodeToChar(text) {
        return text.replace(/\\u[\dA-F]{4}/gi,
               function (match) {
                   return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
               });
    }

благодаря https://stackoverflow.com/users/1497100/bryan-rayner

0
ответ дан Farshad Rockwell 16 January 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: