2017-02-17 7 views
0

私はを使用しています。Devnagriや他のインド語のスクリプト文字をUnicode版に変換しますが、英数字、数字、特殊文字についてはこの機能が失敗します。 誰かがこれに対して他の機能を提案できますか?どの言語の文字をPythonでそれぞれのユニコードに変換するには?

+0

一部examplあなたが体験していることは、火のついた使い方でしょうか?いくつかのコードを貼り付けてください! – Bodao

+0

例を挙げることができますか? '" foo ".encode(" unicode_escape ")'が動作します。 – tdelaney

+0

Pythonと私たちはユニコードを話しているので、あなたは2.xや3.xを使っているかどうかを言いたいかもしれません... –

答えて

0

unicode_escapeコーデックは、非アスキー文字のみをUnicodeエスケープ形式に変換します。しかし、あなたは自分でフォーマットすることができます。

#!python3.6 
# coding:utf8 
import re 

def escape(s): 
    def replace(m): 
     item = ord(m.group(0)) 
     if item < 0x100: 
      return fr'\x{item:02x}' 
     elif item < 0x10000: 
      return fr'\u{item:04x}' 
     return fr'\U{item:08X}' 
    return re.sub(r'.',replace,s) 

s = 'abcü马克' 
print(escape(s)) 

出力:

\x61\x62\x63\xfc\u9a6c\u514b\U0001F600 

はここのPython 2.7(狭いビルド)だ換算...と、なぜUnicodeを使用して、誰もがPythonの3に切り替える必要があります。

#!python2.7 
#coding:utf8 
import re 

def escape(s): 
    def replace(m): 
     char = m.group(0) 
     if len(char) > 1: 
      # Python 2 uses UTF-16 surrogate pairs for Unicode above U+FFFF. 
      # Manually convert a UTF-16 surrogate pair to a Unicode ordinal. 
      item = (((ord(char[0]) & 0x3FF) << 10) | (ord(char[1]) & 0x3FF)) + 0x10000 
     else: 
      item = ord(char) 
     if item < 0x100: 
      return r'\x{:02x}'.format(item) 
     elif item < 0x10000: 
      return r'\u{:04x}'.format(item) 
     return r'\U{:08X}'.format(item) 
    # This regular expression detects UTF-16 surrogate pairs. 
    return re.sub(ur'[\ud800-\udbff][\udc00-\udfff]|.',replace,s) 

s = u'abcü马克' 
print(escape(s)) 

出力(同):

\x61\x62\x63\xfc\u9a6c\u514b\U0001F600 
+0

OPはPython 2.7上にあるようですので、3.6のf-string構文はおそらく役に立ちません。 :-) – ShadowRanger

+0

@ShadowRangerさんは彼の質問にそれを入れておいた方がいいでしょう。トレーニング:)私はコメントを見た後、とにかく2.7バージョンで作業していた。これはPython 3に切り替える理由の良い例です:) –

+1

引数がありません。私はPy2が恐ろしい死を迎えているため、私たちが常に背中の背後に縛られた片手でコーディングしているわけではありません。 :-) – ShadowRanger

関連する問題