Может показаться, что в этом поле есть ограничение по длине.Предполагая, что они используют UTF-8, это будет ограничение в 64 байта, а не целое число символов.
Кажется, что Facebook обрезает строку на этом количестве байтов, независимо от того,ограничение байта происходит для выравнивания по границе символа или нет.К сожалению, такого рода неправильное поведение распространено в языках, которые не обрабатывают текстовые строки как символы Unicode.В вашем случае последний い
занимает три байта, но есть место только для двух, поэтому у вас останется два завершающих байта, которые не образуют правильную последовательность UTF-8, следовательно, ��
.
Чтобы это не произошло, вы должны выполнить их работу и наложить ограничение длины в чистом Unicode-режиме.Один из способов сделать это - кодировать в UTF-8 самостоятельно, выполнять усечение и преобразовывать обратно в символы, игнорируя недопустимые конечные байты.например, в Python:
>>> print u'あいうえおかきくけこあいうえおかきくけこあい'.encode('utf-8')[:64].decode('utf-8', 'ignore')
あいうえおかきくけこあいうえおかきくけこあ