Найти - Пользователи
Полная версия: decode('utf-8') теряет половину строки кирилиццы
Начало » Python для новичков » decode('utf-8') теряет половину строки кирилиццы
1
Rumit
Приложение-клиент С# отправяет строку на 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: Рик
C# отправляет и принимает битовые строки в utf8
o7412369815963
Rumit
decode('utf-8') теряет половину строки кирилиццы
Результат программы показывает, что decode ничего не теряет.

Скрипт вроде как корректный.
Наверно проблема в программе на C#, в теории там отправляются байты при том что кол-во байт взято как кол-во символов в строке, т.е. вместо 12 байт отправляется 6.
o7412369815963
o7412369815963
Результат программы показывает, что decode ничего не теряет.
Забыл разъяснить, русские символы в utf8 занимают по 2 байта, т.е. b'\xd0\xa0\xd0\xb8\xd0\xba' - это 3 символа, а не 6.
Rumit
Спасибо большое, помог, оказывается я отправлял длину буфера по кол-ву символов в строке, а раз латинская буква = 1 бит, а кириллица = 2 битам, то и приходило пол сообщения
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB