Base64 преобразовывает двоичный файл для отправки текстовых сообщений. Если Вы захотите преобразовать текст в base64 формат, то необходимо будет преобразовать текст в двоичный файл с помощью некоторого соответствующего кодирования (например, UTF-8, UTF-16) сначала.
Конечно, они могут. Это зависит от того, как Ваш язык или стандартная программа 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)
الله
Вы не указывали, какой язык (языки) Вы используете, но пытаетесь преобразовать строку в массив байтов (однако, это сделано на Вашем предпочтительном языке), и затем base64 кодирование тот массив байтов.
В .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);