Генерировать случайные строки китайских иероглифов в Python

Я написал небольшой фрагмент кода, который ищет в App Store случайную строку из трех букв:

searchTerm = (''.join(random.choice(string.ascii_lowercase) for i in range(3)))
    urllib.urlretrieve("https://itunes.apple.com/search?country=us&entity=software&limit=5&term=" + str(searchTerm), "download.txt")

Теперь мне интересно, как я мог бы сделать то же самое, но с китайскими иероглифами, так как я хотел бы также изучить китайский App Store.

Я просмотрел этот вопрос создание списка традиционных Китайские иероглифы из строки, но это не помогло.


person vandernath    schedule 05.08.2015    source источник


Ответы (1)


Что такое китайский символ, сложно, см. Каков полный диапазон китайских символов в Unicode?

Вы можете выбрать диапазоны Unicode, которые подходят для вашего случая:

#!/usr/bin/env python2
import random
import urllib

common, rare = range(0x4e00, 0xa000), range(0x3400, 0x4e00)
chars = map(unichr, rare + common)
random_word = u''.join([random.choice(chars) for _ in range(3)]) # 3 letters
search_term = urllib.quote(random_word.encode('utf-8'), safe='')
path, headers = urllib.urlretrieve("https://itunes.apple.com/search?"
    "country=cn&entity=software&limit=5&term=" + search_term,
    u"download%s.json" % random_word)

Вы, вероятно, хотите data = json.load(urllib2.urlopen(url)) вместо сохранения ответа в файл.

person jfs    schedule 06.08.2015
comment
Спасибо. Однако когда я печатаю search_term, я получаю странную строку символов, подобную этой: %E3%B6%80%E3%B5%8B%E4%9F%BF Почему? Проблема с кодировкой? - person vandernath; 06.08.2015
comment
@vandernath: нет, это ожидается для значения в кодировке urlencoded. Вместо этого вы хотите напечатать random_word (строка Unicode). - person jfs; 06.08.2015
comment
Понятно. Тогда мне непонятна строка search_term, зачем перед поиском кодировать random_word? Я просто хотел бы понять ваш код, поскольку я новичок. :-) - person vandernath; 06.08.2015
comment
@vandernath: URL-адрес не может содержать символы, отличные от ASCII. Они должны быть закодированы в процентах. Некоторые браузеры автоматически декодируют URL-адрес в адресной строке (чтобы отобразить его человеку), но всегда отправляют процентно закодированные URL на http-сервер. Запустите анализатор сети, например tcpdump, wireshark, чтобы увидеть необработанные URL-адреса (или просто скопируйте URL-адрес с Unicode и вставьте его в текстовый редактор. - person jfs; 06.08.2015