|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
Есть приложение клиент TCP на android (не FMX), оно подключается к серверу на delphi Старт сервера Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
при отправке запроса с клиента выполняется Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
пробовал менять кодировки, но в любом случае на андроиде кракозяблы, если делать клиента на delphi, то ч-з потоки всё норм А так понимаю, что если принимаю в UTF8, то и возвращать надо в нем же, но не получается... Или я что-то не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 07:12 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, Может в Delphi 10.x есть что-то более современно для организации сокетов? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 08:06 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, в каком виде кракозябры-то хоть? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 09:58 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox А так понимаю, что если принимаю в UTF8, то и возвращать надо в нем же, но не получается... это надо у автора клиента уточнить, как минимум. Может он в принципе кириллицу не способен отображать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 10:01 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, Код: pascal 1. 2. 3. 4. 5.
конвертация в utf: UTF8Encode() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 10:12 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
В сокете нет строк и кодировки. В сокете есть только байты. Поэтому отправка должна выглядеть так Код: pascal 1. 2. 3. 4. 5. 6.
И чтение Код: pascal 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 12:20 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
del, неправильно написал ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 13:35 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, На событии OnConnect у TIdTCPServer надо задать Код: pascal 1. 2. 3. 4. 5. 6.
В самих методах Read/Write тогда можно не указывать. Мы только так смогли победить кириллицу в 1251 используя что-то вроде этого Код: pascal 1.
P.S. не знаю на что влияет но пишем мы не через Socket, а через IOHandler ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 13:41 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
X-Cite antox, На событии OnConnect у TIdTCPServer надо задать Код: pascal 1. 2. 3. 4. 5. 6.
В самих методах Read/Write тогда можно не указывать. Мы только так смогли победить кириллицу в 1251 используя что-то вроде этого Код: pascal 1.
P.S. не знаю на что влияет но пишем мы не через Socket, а через IOHandler С таким подходом работает, но опять же только при отправке с тел на комп, а назад муевина какая-то (как на скрине) Видимо, надо с клиентом разбираться ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 16:19 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
Cobalt747 antox, в каком виде кракозябры-то хоть? Оч страшные :) Скрин чуть выше ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 16:20 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
DHDD antox, Код: pascal 1. 2. 3. 4. 5.
конвертация в utf: UTF8Encode() При Код: pascal 1.
тот же результат ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 16:21 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox Оч страшные :) Скрин чуть выше ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 18:08 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
Похоже, клиент на Андроиде не может угадать кодировку, может быть в строке нет BOM'а? Это можно проверить и, в случае чего, добавить. Пишут , что не только в файле, но и в потоке BOM вставляют. Может в этом дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 18:16 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
s62 Похоже, клиент на Андроиде не может угадать кодировку, ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 19:41 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
_Vasilisk_ А зачем ему угадывать, если кодировка должна быть определена на уровне протокола? _Vasilisk_ В сокете нет строк и кодировки. В сокете есть только байты. Поэтому отправка должна выглядеть так Код: pascal 1. 2. 3. 4. 5. 6.
И чтение Код: pascal 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 20:02 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
s62 , поэтому не обязательно делать это самому. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 20:37 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
_Vasilisk_, у Инди в общем-то задокументировано, что посылается. ТС может быть пока не знает, что по протоколу посылать нужно. Код: pascal 1.
EmbWrite is an overloaded procedure used to write the specified data type using the IOHandler. AOut is a string with the values to write using the IOHandler. AEncoding is a TIdTextEncoding instance used for values in the string. The default value (Nil) causes the TIdTextEncoding instance in the DefStringEncoding property to be used for the operation. Write converts the value in AOut to a TIdBytes data type, and calls an overloaded variant of the Write method using the bytes values and the specified text encoder as arguments. Код: pascal 1.
EmbWriteLn is a virtual procedure used to write the string value specified in AOut using the IOHandler. AEncoding is a TIdTextEncoding instance used for values in the string. The default value (Nil) causes the TIdTextEncoding instance in the DefStringEncoding property to be used for the operation. WriteLn appends the EOL character sequence to the value in AOut, and calls the Write method to append the value to the write buffering mechanism for the IOHandler. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 20:54 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, может конечно дело вовсе не в этом, но можете попробовать добавить BOM в строку. Как у вас было с потоком, но с добавлением: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 21:21 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
antox, авторпробовал менять кодировки, но в любом случае на андроиде кракозяблы, если делать клиента на delphi, то ч-з потоки всё норм А так понимаю, что если принимаю в UTF8, то и возвращать надо в нем же, но не получается..Может быть клиенту на Java нужно указать явно, что он принимает строку UTF8? Если есть такая возможность. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 21:32 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
авторесли делать клиента на delphi, то ч-з потоки всё норм Т.е., следует понимать, улетает все как должно? Что ж вы тут голову всем морочите, все ваш сервер правильно делает. А проблема у клиента с интерпретацией приходящего. У JVM есть опция default charset, обычно она установлена в utf8, но может и отличаться. Задается флагом командной строки при запуске JVM. Этот умолчальный чарсет как раз и отвечает за преобразование массива байт во внутреннюю строку Java в том случае, когда явный чарсет не задан. Андроид русский, английский, китайский?.. Вам нужно или переписать клиента, указав при приеме чарсет явно, или настроить среду Java на default charset = utf8, или расширить протокол, и передавать вместе с текстом идентификатор чарсета. Соответственно, принимать этот идентификатор и производить нужные телодвижения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 21:54 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
Судя по вышеприведенной картинке, похоже, что у вас Java.defaultCharset = CP1252, он же ISO-8859-1, Андроид для Европы или Америки. И не ищите в Java ни windows-1251, ни windows-1252, их там нет. Только их синонимы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2021, 22:17 |
|
Кодировка при отправке через TCP
|
|||
---|---|---|---|
#18+
Да, сервер работает правильно, клиент на flutter глючил при получении конвертировал так: Код: c# 1.
поменял на: Код: c# 1.
после этого все заработало нормально ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2021, 05:58 |
|
|
start [/forum/topic.php?fid=58&msg=40102255&tid=2036969]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 263ms |
0 / 0 |