Символы Base64ing Unicode

18
задан Peter Mortensen 17 September 2011 в 14:03
поделиться

4 ответа

Base64 преобразовывает двоичный файл для отправки текстовых сообщений. Если Вы захотите преобразовать текст в base64 формат, то необходимо будет преобразовать текст в двоичный файл с помощью некоторого соответствующего кодирования (например, UTF-8, UTF-16) сначала.

20
ответ дан 30 November 2019 в 07:13
поделиться

Конечно, они могут. Это зависит от того, как Ваш язык или стандартная программа Base64 обрабатывают вход Unicode. Например, стандартные программы Python b64 ожидают закодированную строку (поскольку Base64 кодирует двоичный файл для отправки текстовых сообщений, не кодовые точки Unicode для отправки текстовых сообщений).

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)
الله
17
ответ дан 30 November 2019 в 07:13
поделиться

Вы не указывали, какой язык (языки) Вы используете, но пытаетесь преобразовать строку в массив байтов (однако, это сделано на Вашем предпочтительном языке), и затем base64 кодирование тот массив байтов.

1
ответ дан 30 November 2019 в 07:13
поделиться

В .NET можно попробовать так (кодировать):

byte[] encbuf;

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

...и декодировать:

byte[] decbuff;

decbuff = Convert.FromBase64String(this.ToString());
string decoded = System.Text.Encoding.Unicode.GetString(decbuff);
1
ответ дан 30 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: