7

のような Unicode としてエンコードされた韓国語の文字列がありますu'정정'。この文字列を表すのに必要なバイト数を知るにはどうすればよいですか?

iOS プッシュ通知に文字列を使用しており、ペイロードのサイズに制限があるため、正確なバイト数を知る必要があります。

len('정정')バイト数ではなく文字数を返すため、機能しません。

4

3 に答える 3

14

バイトサイズを測定するエンコーディングを知る必要があります。

>>> 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!)です。

于 2012-08-06T17:17:43.510 に答える
4

を表すために必要なバイト数は、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後でエンコード済みの結果をプルして再利用することをお勧めします。

于 2012-08-06T17:17:38.163 に答える
0

正しい標準エンコーディングを使用していることを確認してください。

そうでない場合は、いつでもdecodedString = myString.decode('UTF-8')(UTF-8でない場合は、前のリンクから見つけることができる正しいエンコーディング文字列でUTF-8を置き換えてください)len(decodedString)、適切な数値を返す必要がある形式で文字列を取得できます

于 2012-08-06T17:17:40.213 に答える