Случайная строка юникода Python

#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 например.