¿Pueden codificarse y decodificarse los caracteres Unicode con Base64?Caracteres Unicode de Base64ing
He intentado codificar la cadena 'الله', pero cuando decodifiqué todo lo que obtuve fue '????'.
¿Pueden codificarse y decodificarse los caracteres Unicode con Base64?Caracteres Unicode de Base64ing
He intentado codificar la cadena 'الله', pero cuando decodifiqué todo lo que obtuve fue '????'.
Base64 convierte binario a texto. Si desea convertir texto a un formato base64, primero deberá convertir el texto a binario con la codificación adecuada (por ejemplo, UTF-8, UTF-16).
¿cómo haré eso, si estuviera trabajando en PHP? – think123
@ think123: ¿Qué bit? No es probable que yo sepa de todos modos, sin saber PHP, pero dividir la tarea en bits es probable que te ayude a encontrar la respuesta mediante la búsqueda. –
simplemente convirtiendo texto en binario usando UTF-8, principalmente. – think123
Por supuesto que pueden. Depende de cómo su lenguaje o rutina Base64 maneje la entrada Unicode. Por ejemplo, las rutinas de b64
de Python esperan una cadena codificada (como Base64 codifica el binario para el texto, no los puntos de código Unicode para el texto).
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)
الله
+1 para ejemplos –
Me gustaría señalar que la cadena devuelta no es un objeto Unicode. debe decodificarse de la siguiente manera: c = base64.b64decode (b) .decode ('utf-8') – DanJ
No especificó qué idioma (s) está utilizando, pero intente convertir la cadena en una matriz de bytes (sin embargo, eso se hace en el idioma que prefiera) y luego base64 codificando esa matriz de bytes.
En .NET puede probar esto (codificar):
byte[] encbuf;
encbuf = System.Text.Encoding.Unicode.GetBytes(input);
string encoded = Convert.ToBase64String(encbuf);
... y para decodificar:
byte[] decbuff;
decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);
Dependería de cómo la rutina de base 64 es agarrar los datos, lo que es lo plataforma y el código? La respuesta es sí, pueden, por supuesto. –
Los datos se codifican en Delphi y se decodifican/utilizan en PHP – UnkwnTech
Lo sentimos, no hay ninguna pista sobre Delphi. Pero proporcioné una respuesta que demuestra que este problema no tiene nada que ver con base64 –