복붙노트

[REDIS] 파이썬에서 유니 코드

REDIS

파이썬에서 유니 코드

지금은 내 MySQL 데이터베이스와 레디 스와 redispy과 불로 불사의 영약을 사용하고 난 모든 장소에서 UTF-8을 선택합니다. {: '折 8', '이름': '정보' '家乐福'} I 싶어 같은 중국어에 일부 데이터 쓰기를 얻을하지만 내가 가진 것은 다음과 같이이다 :

{'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}

내가 레디 스이 딕셔너리를 저장하고 redispy하여 나가 후가된다 :

{"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"}

나는 "8 折"저를 보여하지만 기능이나이 문제에 다른 해결책이 내가 8 \ u6298 전에 'U를 추가하면 알고 그것을 인쇄?

해결법

  1. ==============================

    1.JSON과 같은 후자의 모습은, 먼저 디코딩하려고 :

    JSON과 같은 후자의 모습은, 먼저 디코딩하려고 :

    import json
    
    resp = '{"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"}'
    print json.loads(resp)
    
    ## {u'Info': u'8\u6298', u'Name': u'\u5bb6\u4e50\u798f'}
    
  2. ==============================

    2.당신은 단지에 repr (재현) 문자열을보고있다. 그러나 내부 문자열에서 같은 유니 코드입니다.

    당신은 단지에 repr (재현) 문자열을보고있다. 그러나 내부 문자열에서 같은 유니 코드입니다.

    이 시도:

    Python2> d = {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}
    Python2> d
    {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'}
    Python2> print d["Name"]
    家乐福
    

    아,하지만 당신은 다시 점점되지 않습니다. 당신은 비 유니 코드 형태 등을 가지고있다. 한 빠른 해킹을 평가 후면입니다.

    import ast
    ast.literal_eval(d["Name"])
    

    그러나 더 나은 시스템이 유니 코드를 라운드 트립없는 이유를 파악하는 것입니다.

  3. ==============================

    3.당신은 더 인코딩 형식이없는 유니 코드 인스턴스로 8 \ u6298, 파이썬 저장하기 전에 '이 값을 U를 추가합니다.

    당신은 더 인코딩 형식이없는 유니 코드 인스턴스로 8 \ u6298, 파이썬 저장하기 전에 '이 값을 U를 추가합니다.

    당신은 레디 스에 데이터를 입력하기 전에, 당신은 당신의 유니 코드 인스턴스를 인코딩해야 그것이 실제 문자열이 될 수 있도록.

    당신은 그래서 그냥, 장소 모두에서 UTF-8을 선택

    >>> x=u'8\u6298'
    >>> type(x)
    <type 'unicode'>
    >>> y=x.encode('utf8')
    >>> type(y)
    <type 'str'>
    >>> y
    '8\xe6\x8a\x98'
    >>> print y
    8折
    

    X 대신 Y를 저장합니다. 당신이 데이터베이스에서 읽은는, 출력은 문자열입니다 '8 \ XE6 \ x8a \ x98'(8 折)이 아닌 파이썬 인스턴스 '8 \ u6298'더 이상.

  4. ==============================

    4.당신은 문자열의 유니 코드의 버전을 원한다면, 여기 좀 봐

    당신은 문자열의 유니 코드의 버전을 원한다면, 여기 좀 봐

  5. from https://stackoverflow.com/questions/9867749/unicode-in-python by cc-by-sa and MIT license