Символы Unicode в кодировке Base64ing

Можно ли кодировать и декодировать символы Юникод с помощью Base64?

Я попытался закодировать строку «الله», но когда я ее декодировал, все, что я получил, было «????».

Это будет зависеть от того, как процедура Base64 собирает данные, какова платформа и какой код? Ответ: да, конечно, могут.

Vinko Vrsalovic 20.11.2008 15:32

Данные кодируются в Delphi и декодируются / используются в PHP.

UnkwnTech 20.11.2008 15:35

Извините, я понятия не имею о Delphi. Но я дал ответ, который доказывает, что эта проблема не имеет ничего общего с base64.

Vinko Vrsalovic 20.11.2008 15:40

Хотя может быть как ты на PHP декодируешь. Разве вы не можете предоставить реальный пример кода? Проблемы с Unicode могут быть сложными, особенно на разных языках / платформах

Vinko Vrsalovic 20.11.2008 15:40

Что касается PHP, я использую встроенную функцию base64_decode.

UnkwnTech 20.11.2008 15:42

Если вам просто нужен unicode / (любые другие символы) в формате URL (возможно, для CSS), вы можете использовать SVG: list-style-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><text>+</text></svg>")

laggingreflex 13.04.2018 14:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
6
24 918
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Конечно могут. Это зависит от того, как ваш язык или подпрограмма 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)
الله

Замечу лишь, что возвращаемая строка не является объектом Unicode. его нужно декодировать следующим образом: c = base64.b64decode (b) .decode ('utf-8')

DanJ 06.07.2010 10:59
Ответ принят как подходящий

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

@ think123: Какой бит? Не то, чтобы я все равно знал, не знаю PHP, но разбиение задачи на части, вероятно, поможет вам найти ответ через поиск.

Jon Skeet 30.01.2014 09:10

просто преобразование текста в двоичный код, в основном, с использованием UTF-8.

Lucas 30.01.2014 09:12

@ think123 Я подозреваю, что поиск по запросу «PHP text utf-8» даст вам несколько результатов. Если после их прочтения вы ничего не добьетесь, я предлагаю вам задать новый вопрос.

Jon Skeet 30.01.2014 09:13

Я нашел решение - просто utf8_decode строка после base64_decode, вставившая строку base64_encoded utf8_encoded. Просто для справки в будущем.

Lucas 30.01.2014 09:20

Вы не указали, какой язык (и) вы используете, но попробуйте преобразовать строку в массив байтов (однако это делается на выбранном вами языке), а затем закодируйте этот массив байтов в кодировке 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);

Другие вопросы по теме