unicode - utf8 - utf 8 bom




Base64ing Caratteri Unicode (3)

I caratteri Unicode possono essere codificati e decodificati con Base64 ?

Ho tentato di codificare la stringa 'الله', ma quando ho decodificato tutto quello che ho ottenuto è stato '????'.


Base64 converte binario in testo. Se si desidera convertire il testo in un formato base64, è necessario convertire il testo in binario usando prima la codifica appropriata (ad es. UTF-8, UTF-16).


Non hai specificato quale lingua stai usando, ma prova a convertire la stringa in una matrice di byte (ma ciò è fatto nella tua lingua preferita) e poi codifica in base 64 quella matrice di byte.


Certo che possono. Dipende da come la tua lingua o routine Base64 gestisce l'input Unicode. Ad esempio, le routine b64 di Python prevedono una stringa codificata (dato che Base64 codifica in formato binario in testo, non codepoints Unicode in testo).

Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'ûñö'
>>> import base64
>>> base64.b64encode(a)
'w7vDscO2'
>>> base64.b64decode('w7vDscO2')
'\xc3\xbb\xc3\xb1\xc3\xb6'
>>> print '\xc3\xbb\xc3\xb1\xc3\xb6'
ûñö
>>>     
>>> u'üñô'
u'\xfc\xf1\xf4'
>>> base64.b64encode(u'\xfc\xf1\xf4')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/base64.py", line 53, in b64encode
    encoded = binascii.b2a_base64(s)[:-1]
UnicodeEncodeError: 'ascii' codec can't encode characters in position
0-2: ordinal not in range(128)
>>> base64.b64encode(u'\xfc\xf1\xf4'.encode('utf-8'))
'w7zDscO0'
>>> base64.b64decode('w7zDscO0')
'\xc3\xbc\xc3\xb1\xc3\xb4'
>>> print base64.b64decode('w7zDscO0')
üñô
>>> a = 'الله'
>>> a
'\xd8\xa7\xd9\x84\xd9\x84\xd9\x87'
>>> base64.b64encode(a)
'2KfZhNmE2Yc='
>>> b = base64.b64encode(a)
>>> print base64.b64decode(b)
الله






base64