Название альбома искажается, когда символы японские - PullRequest
3 голосов
/ 22 сентября 2011

Пожалуйста, дайте мне знать максимальное количество "Название альбома".

Сейчас я занимаюсь разработкой приложения для загрузки фотографий с Graph API. При создании альбома имя альбома искажается, если количество японских символов превышает 21. Ниже приведен пример этой проблемы.

например.
Вход:
あ い う え お か き く け こ あ い う え お か き く け こ あ い
Зарегистрированное название альбома:
あ い う え お か き く け こ あ い う え お か き く け こ あ

Обратите внимание, что такая же проблема возникает, если в качестве имени альбома задано более 21 корейского или китайского символа.

1 Ответ

2 голосов
/ 23 сентября 2011

Может показаться, что в этом поле есть ограничение по длине.Предполагая, что они используют UTF-8, это будет ограничение в 64 байта, а не целое число символов.

Кажется, что Facebook обрезает строку на этом количестве байтов, независимо от того,ограничение байта происходит для выравнивания по границе символа или нет.К сожалению, такого рода неправильное поведение распространено в языках, которые не обрабатывают текстовые строки как символы Unicode.В вашем случае последний занимает три байта, но есть место только для двух, поэтому у вас останется два завершающих байта, которые не образуют правильную последовательность UTF-8, следовательно, ��.

Чтобы это не произошло, вы должны выполнить их работу и наложить ограничение длины в чистом Unicode-режиме.Один из способов сделать это - кодировать в UTF-8 самостоятельно, выполнять усечение и преобразовывать обратно в символы, игнорируя недопустимые конечные байты.например, в Python:

>>> print u'あいうえおかきくけこあいうえおかきくけこあい'.encode('utf-8')[:64].decode('utf-8', 'ignore')
あいうえおかきくけこあいうえおかきくけこあ
...