#python #unicode
#питон #юникод
Вопрос:
Я новичок в Python и Unicode. Я пытаюсь сгенерировать случайную строку Юникода в python. Это то, что я придумал:
def randomUnicodeStr(self, ustart, uend):
'''Generate a random unicode string whose length is strlen and whose unicode characters are in range ustart, uend'''
strlen = 5
uchars = [random.choice(range(ustart, uend 1)) for _ in range (strlen)]
ustr = u''
for uc in uchars:
ustr = unichr(uc)
#for i in range(len(ustr)):
# print "Py char " str(i) " = " str(ord(ustr[i]))
return ustr
Я не могу собрать эту информацию из документации python, но какую кодировку ustr
использует мое приведенное выше ?.
Комментарии:
1. Строки Юникода не кодируются по определению. Кодирование — это то, что происходит, когда вы преобразуете строку в байты для записи на устройство.
2. @MarkRansom: ОЗУ тоже является устройством, поэтому его нужно как-то закодировать. Он считает, что это UCS-4 в новейших pythons, однако этот факт совершенно не имеет значения для разработчика приложений на Python.
3. Последующий вопрос — что именно вы пытаетесь сделать со строкой, и почему вы думаете, что вам нужно знать кодировку? Код, который вы ввели в вопрос, выглядит вполне адекватным для вашей заявленной цели.
4. @MarkRansom: У нас есть настройка, в которой наши регрессионные тесты написаны на python, и они вызывают наш код на c . Эта строка юникода, которую я генерирую с помощью этой функции, используется в качестве аргумента функции c , которая получает эту строку как icu::UnicodeString . Когда я просматриваю символы на стороне c и печатаю их кодовые значения, я вижу, что они соответствуют кодовым значениям, которые я установил в своей функции python. Поскольку я новичок в unicode, мне было интересно, нужно ли мне беспокоиться о кодировании, поскольку эта строка пересекает языковые границы. Похоже, это не так, я в порядке, я думаю.
5. Тогда вам нужно представление, которое передается в C API, которое может отличаться от внутреннего представления (это деталь реализации, о которой вам не следует беспокоиться). См. docs.python.org/3/whatsnew/3.3.html#pep-393 например.