V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fyyz
V2EX  ›  Python

python3 获得 /uxxxx/uxxxx 这样的乱码字符串,数据类型是 str,怎么转换成正确的中文?

  •  1
     
  •   fyyz · 2015-10-19 18:34:53 +08:00 · 5557 次点击
    这是一个创建于 3358 天前的主题,其中的信息可能已经有所发展或是发生改变。
    \u6781\u8def\u7531-\u6781\u58f9S
    <class 'str'>

    stackoverflow 上搜了一圈没找到可用的方法。可能英美这些国家用 ascii 就够了吧。
    第 1 条附言  ·  2015-10-20 20:20:07 +08:00
    谢谢大家,尤其是 14 楼。

    我发现,我获取到的数据是这样的:
    \\u6781\\u8def\\u7531-\\u6781\\u58f9S

    被 python 处理以后,就变成
    \u6781\u8def\u7531-\u6781\u58f9S

    现在通过
    eval("'"+s+"'")
    能成功地讲数据转换为正确的输出了。

    可能有人会觉得 eval 不安全,但是实际上数据的来源非常可靠,所以 eval 也没什么隐患了。
    20 条回复    2015-11-08 16:06:28 +08:00
    imn1
        1
    imn1  
       2015-10-19 18:43:51 +08:00
    提示: json
    Zzzzzzzzz
        2
    Zzzzzzzzz  
       2015-10-19 18:52:06 +08:00
    s.encode('utf8').decode('unicode-escape')
    PythonAnswer
        3
    PythonAnswer  
       2015-10-19 18:53:53 +08:00
    >>> print("\u6781")
    hahasong
        4
    hahasong  
       2015-10-19 19:27:08 +08:00 via iPhone   ❤️ 1
    楼主重新定义乱码
    echo1937
        5
    echo1937  
       2015-10-19 19:44:25 +08:00

    楼主你这算哪门子乱码啊.
    limbo0
        6
    limbo0  
       2015-10-19 19:45:19 +08:00
    这是 unicode, 需要 encode 一下
    fyyz
        7
    fyyz  
    OP
       2015-10-19 19:51:58 +08:00 via Android
    看了下楼上各位的回答,我觉得我情况说得不够清楚。代码在公司,明天上班再把具体情况说下。
    Kisesy
        8
    Kisesy  
       2015-10-19 20:01:05 +08:00
    a = '\u6781\u8def\u7531-\u6781\u58f9S'
    print(a)
    # 极路由-极壹 S
    print(a[0])
    # 极

    自动转
    lixia625
        9
    lixia625  
       2015-10-19 20:26:23 +08:00
    并不是你看不懂的码都叫乱码
    PythonAnswer
        10
    PythonAnswer  
       2015-10-19 20:47:45 +08:00
    你那个是正码, 不是乱码.

    标准的 json 就是 ascii 字符存储的, 不然你放汉字进去, 然后在 ssh 到服务器上打开, 那才是真正的乱码...
    RqPS6rhmP3Nyn3Tm
        11
    RqPS6rhmP3Nyn3Tm  
       2015-10-19 20:58:57 +08:00 via iPad
    这不是乱码啊……编码问题应该是学 Python 第一天就要了解的吧……
    xavierskip
        12
    xavierskip  
       2015-10-19 21:14:52 +08:00
    还搜了一圈都没搜到,我就是在 stackoverflow 上找到的答案。

    这是我在 segmentfault 上的回答 http://segmentfault.com/q/1010000003651656
    leyle
        13
    leyle  
       2015-10-19 22:04:03 +08:00 via Android
    你们可能没有理解楼主的意思,楼主粘贴出来的东西和你们再次复制回去的,在 python 中不是一个东西。

    楼主这个问题我以前遇到过,但是忘记咋个解决的了,明天白天找找看。
    zsj950618
        14
    zsj950618  
       2015-10-19 22:04:07 +08:00
    来,看几种情况。
    a1='\u6781'
    a2='\\u6781'
    a3='"\\u6781"'

    print(a1)
    '"'+a2+'"' == a3
    print(json.loads(a3))
    zsj950618
        15
    zsj950618  
       2015-10-19 22:06:40 +08:00
    发现二楼也已经给出方法了。。

    a2='\\u6781'
    print(a2.encode('utf8').decode('unicode-escape'))
    Kisesy
        16
    Kisesy  
       2015-10-19 23:06:03 +08:00
    还有一种
    print(b'\u4f60\u597d'.decode('raw_unicode_escape'))
    MrZephyrus
        17
    MrZephyrus  
       2015-10-19 23:19:22 +08:00
    楼主重新定义乱码
    jamesliu96
        18
    jamesliu96  
       2015-10-20 07:10:30 +08:00
    你这个乱码可以 66666
    烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
    billgreen1
        19
    billgreen1  
       2015-10-20 22:16:30 +08:00
    python2.7 是不行的
    p1n3
        20
    p1n3  
       2015-11-08 16:06:28 +08:00
    `Python 2.7.9 (default, Apr 2 2015, 15:33:21)
    [GCC 4.9.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = u'\u6781\u8def\u7531-\u6781\u58f9S'
    >>> print a
    极路由-极壹 S
    `
    @billgreen1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:16 · PVG 22:16 · LAX 06:16 · JFK 09:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.