のような Unicode としてエンコードされた韓国語の文字列がありますu'정정'
。この文字列を表すのに必要なバイト数を知るにはどうすればよいですか?
iOS プッシュ通知に文字列を使用しており、ペイロードのサイズに制限があるため、正確なバイト数を知る必要があります。
len('정정')
バイト数ではなく文字数を返すため、機能しません。
バイトサイズを測定するエンコーディングを知る必要があります。
>>> print u'\uC815\uC815'
정정
>>> print len(u'\uC815\uC815')
2
>>> print len(u'\uC815\uC815'.encode('UTF-8'))
6
>>> print len(u'\uC815\uC815'.encode('UTF-16-LE'))
4
>>> print len(u'\uC815\uC815'.encode('UTF-16'))
6
>>> print len(u'\uC815\uC815'.encode('UTF-32-LE'))
8
>>> print len(u'\uC815\uC815'.encode('UTF-32'))
12
Python Unicode HOWTOを確認して、Unicode オブジェクトとそのバイト エンコーディングの違いを十分に理解してください。
もう 1 つの優れた記事は、Joel Spolsky (Stack Overflow の背後にいる人物の 1 人) によるThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)です。
を表すために必要なバイト数は、unicode
使用するエンコードによって異なります。
>>> s = u'정정'
>>> len(s)
2
>>> len(s.encode('UTF-8'))
6
>>> len(s.encode('UTF-16'))
6
>>> len(s.encode('UTF-32'))
12
エンコード結果を再利用する場合は、一度エンコードしてから、len
後でエンコード済みの結果をプルして再利用することをお勧めします。
正しい標準エンコーディングを使用していることを確認してください。
そうでない場合は、いつでもdecodedString = myString.decode('UTF-8')
(UTF-8でない場合は、前のリンクから見つけることができる正しいエンコーディング文字列でUTF-8を置き換えてください)len(decodedString)
、適切な数値を返す必要がある形式で文字列を取得できます