Question

Les caractères Unicode peuvent-ils être codés et décodés avec Base64 ?

J'ai tenté de coder la chaîne '& # 1575; & # 1604; & # 1604; & # 1607;', mais tout ce que j'ai décodé était «????».

Était-ce utile?

La solution

Base64 convertit binaire en texte. Si vous souhaitez convertir du texte au format base64, vous devez d'abord convertir le texte en binaire en utilisant un codage approprié (par exemple, UTF-8, UTF-16).

Autres conseils

Bien sûr, ils peuvent. Cela dépend de la façon dont votre langue ou votre routine Base64 gère les entrées Unicode. Par exemple, les routines b64 de Python attendent une chaîne codée (car Base64 code le binaire en texte, et non les points de code Unicode en texte).

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)
الله

Vous n'avez pas spécifié la ou les langues que vous utilisez, mais essayez de convertir la chaîne en un tableau d'octets (bien que cela soit fait dans la langue de votre choix), puis d'encoder en base64 ce tableau d'octets.

Dans .NET, vous pouvez essayer ceci (encoder):

byte[] encbuf;

encbuf = System.Text.Encoding.Unicode.GetBytes(input);
string encoded = Convert.ToBase64String(encbuf);

... et à décoder:

byte[] decbuff;

decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top