【问题标题】:Generate random strings of Chinese characters in Python在Python中生成随机的汉字字符串
【发布时间】:2015-08-05 19:43:22
【问题描述】:

我写了一小段代码,在 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。

我看过这个问题making a list of traditional Chinese characters from a string,但没有帮助。

【问题讨论】:

    标签: python chinese-locale


    【解决方案1】:

    什么是汉字复杂,见What's the complete range for Chinese characters in 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)) 而不是将响应保存到文件中。

    【讨论】:

    • 谢谢。但是,当我打印 search_term 时,我得到一个奇怪的字符串,如下所示: %E3%B6%80%E3%B5%8B%E4%9F%BF 为什么?编码有问题?
    • @vandernath:不,它应该是一个 urlencoded 值。您想打印 random_word 代替(Unicode 字符串)。
    • 知道了。然后就是我看不懂的那一行search_term,为什么要在搜索前对random_word进行编码呢?我只是想了解您的代码,因为我是初学者。 :-)
    • @vandernath: url 不能包含非 ASCII 字符。它们必须进行百分比编码。一些浏览器会自动解码地址栏中的 url(以将其显示给人类),但它们总是将percent-encoded urls 发送到 http 服务器。运行诸如tcpdumpwireshark 之类的网络嗅探器以查看原始网址(或者只需复制带有 Unicode 的网址并将其粘贴到文本编辑器中。
    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2021-11-29
    相关资源
    最近更新 更多