I caratteri Unicode possono essere codificati e decodificati con Base64?Base64ing Caratteri Unicode
Ho tentato di codificare la stringa "الله", ma quando ho decodificato tutto ciò che ho ottenuto era "????".
I caratteri Unicode possono essere codificati e decodificati con Base64?Base64ing Caratteri Unicode
Ho tentato di codificare la stringa "الله", ma quando ho decodificato tutto ciò che ho ottenuto era "????".
Base64 converte binario al testo. Se si desidera convertire il testo in un formato base64, è necessario convertire il testo in binario utilizzando prima la codifica appropriata (ad esempio UTF-8, UTF-16).
come farei questo, se stavo lavorando in PHP? – think123
@ think123: quale bit? Non è che probabilmente lo saprò comunque, non conoscendo il PHP, ma dividere il compito in bit ti aiuterà probabilmente a trovare la risposta attraverso la ricerca. –
semplicemente convertendo il testo in binario usando UTF-8, principalmente. – think123
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 (poiché 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)
الله
+1 per esempi –
Vorrei solo notare che la stringa restituita non è un oggetto Unicode. dovrebbe essere decodificato come segue: c = base64.b64decode (b) .decode ('utf-8') – DanJ
Non hai specificato la lingua o le lingue che stai utilizzando, ma prova a convertire la stringa in una matrice di byte (tuttavia nella lingua prescelta) e quindi la codifica in base 64 quella matrice di byte.
In .NET si può provare questo (codifica):
byte[] encbuf;
encbuf = System.Text.Encoding.Unicode.GetBytes(input);
string encoded = Convert.ToBase64String(encbuf);
... e decodificare:
byte[] decbuff;
decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);
Sarebbe dipenderà da come la routine Base64 è catturare i dati, qual è il piattaforma e il codice? La risposta è sì, possono, ovviamente. –
I dati vengono codificati in Delphi e decodificati/utilizzati in PHP – UnkwnTech
Spiacente, nessun indizio su Delphi. Ma ho fornito una risposta che dimostra che questo problema non ha nulla a che fare con base64 –