Форум сайта python.su
Приложение-клиент С# отправяет строку на Python эхо-сервер, с латинскими буквами и цифрами все хорошо, но когда отправляю русский текст теряется вторая половина строки:
Python 3.3.2, при отправки строки Риколв
# coding: utf-8 import socket TCP_IP = '127.0.0.1' TCP_PORT = 5100 BUFFER_SIZE = 10240 # Normally 1024, but we want fast response s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) s.listen(2) conn, addr = s.accept() print ('Connection address:', addr) while 1: data = conn.recv(BUFFER_SIZE) print(data) dataUtf = data.decode('utf-8') print(dataUtf) if not data: break print ("received data:", dataUtf) sendText = "Echo Text: " + dataUtf conn.send((sendText).encode('utf-8')) # echo conn.close()
Connection address: ('127.0.0.1', 53868) b'\xd0\xa0\xd0\xb8\xd0\xba' Рик received data: Рик
Отредактировано Rumit (Сен. 19, 2013 23:07:46)
Офлайн
RumitРезультат программы показывает, что decode ничего не теряет.
decode('utf-8') теряет половину строки кирилиццы
Офлайн
o7412369815963Забыл разъяснить, русские символы в utf8 занимают по 2 байта, т.е. b'\xd0\xa0\xd0\xb8\xd0\xba' - это 3 символа, а не 6.
Результат программы показывает, что decode ничего не теряет.
Офлайн
Спасибо большое, помог, оказывается я отправлял длину буфера по кол-ву символов в строке, а раз латинская буква = 1 бит, а кириллица = 2 битам, то и приходило пол сообщения
Офлайн