Перейти к содержимому
  • 0
Teen_Romance

Как кодировать русские символы в http запросах

Вопрос

Есть код который табличку тестовую конвертит в json строку и пытается отправить на сервер POST запросом:

local function test()
    local url = "http://localhost"

    local headers = {
        ["Content-Type"] = "text/plain"
    }
    local body = {
        field = "поле"
    }

    local encodedBody = JSON:encode(body)
    local handle = internet.request(url, encodedBody, headers)

    for chunk in handle do
        print(chunk)
    end
end

Это все принимает эндпоинт мой и принтит в консоль. Дело в том, что русские символы как то плохо кодируются, и у меня в зависимости от хедера, на сервере получается 

%7B%22field%22%3A%22%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%22%7D= (без хедера)

или
{"field":"����"} (с хедером)
Как мне зафорсить это все в utf-8 чтобы на сервере приходили нормальные символы? Это не проблема json библиотеки, потому что даже если строку "привет" передать в request() как body, то результат тот же.
Плюс если я отправляю строку с русскими символами через postman то в консоли сервера тоже нормально отображаются русские символы

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

2 часа назад, Teen_Romance сказал:

Почему именно в JSON? Тут же больше про саму lua как я понимаю, так как в консоль \ файл \ pastebin результат JSON:encode() выводится нормально.

Я в итоге так и не могу прийти к решению этого всего)) Я понял что символы оно в какой то момент превращает в \uXXXX но я не понимаю в какой и как пофиксить и где. Перед самой отправкой в lua в консоли мне выводит 
image.png.c5ed645d767826d930e471b48d6eac5f.png
а уже на сервере(java Spring boot) у меня
{"field":"������, ���!"}

Ну, JSON:encode не превращает тебе в нормальные символы твою кириллицу. Ты перед отправкой используй Unicode Escape Sequence, тогда при запросе на сервак кодировка не слетит, потому что все символы в ASCII будут.

Либо на самом серваке укажи кодировку принимаемую: Why doesn't Spring Boot force UTF-8 for parameters in a POST request? · Issue #1819 · spring-projects/spring-boot (github.com)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, ov3rwrite сказал:

См. Unicode Escape Sequence для JSON

А можно более прямую наводку в виде ссылки или примера может быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, Teen_Romance сказал:

А можно более прямую наводку в виде ссылки или примера может быть?

 

https://dencode.com/string/unicode-escape

Ниже под декодером описан принцип. TL;DR: Любые Unicode символы в JSON кодируются в формате \uXXXX , где XXXX - шестнадцатеричный код символа.

 

Например, "Привет, мир!" - \u041F\u0440\u0438\u0432\u0435\u0442\u002C\u0020\u043C\u0438\u0440\u0021

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, ov3rwrite сказал:

Любые Unicode символы в JSON

Почему именно в JSON? Тут же больше про саму lua как я понимаю, так как в консоль \ файл \ pastebin результат JSON:encode() выводится нормально.

Я в итоге так и не могу прийти к решению этого всего)) Я понял что символы оно в какой то момент превращает в \uXXXX но я не понимаю в какой и как пофиксить и где. Перед самой отправкой в lua в консоли мне выводит 
image.png.c5ed645d767826d930e471b48d6eac5f.png
а уже на сервере(java Spring boot) у меня
{"field":"������, ���!"}

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообщем в тоге получилось если вот так энкодить русские строки перед отправкой:

function urlencode(str)
    local encoded = ""
    for i = 1, unicode.len(str) do
        local char = unicode.sub(str, i, i)
        local byteSeq = {string.byte(char, 1, -1)}

        for _, byte in ipairs(byteSeq) do
            encoded = encoded .. string.format("%%%02X", byte)
        end
    end
    return encoded
end

И от так от декодить:

URLDecoder.decode(body.get("field"), "UTF-8")

Хотелось бы конечно как то на серваке указать что то чтобы оно без моего вмешательства разбиралсь че к чему, но не понятно же какую кодировку указывать. Тупа UTF-8 не пашет)

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...