2013-05-19 2 views
2

Я изо всех сил пытаюсь найти любые ресурсы в этом онлайн-режиме. Я читал о проблемах UCS-2 и UTF-16, но я не могу найти решение.кодировать строку как utf-16 для base64 в javascript

мне нужно, чтобы получить значение от входа:

var val = $('input').val() 

и кодировать его в base64, рассматривая текст как UTF-16, так:

this is a test 

становится:

dABoAGkAcwAgAGkAcwAgAGEAIAB0AGUAcwB0AA== 

, а не ниже, который вы рассматриваете как UTF-8:

dGhpcyBpcyBhIHRlc3Q= 
+0

В чем вопрос? Как сгенерировать то же, что и в UTF-8? Я полагаю, что не – Alexander

ответ

1

Ваши данные, прочитанные в JavaScript, будут в формате без кодирования (строго говоря, это должно быть в Unicode Normalized Form C, но Unicode - это всего лишь серия идентификационных номеров для каждого глифа в лексике Unicode , Это без кодирования). Итак: если вам нужны данные, закодированные как последовательность байтов UTF-16, сделайте это, а затем base64 закодируйте это.

Но вот забавная часть: какой UTF-16 вам нужен? Маленький или Большой Эндиан? С или без спецификации? UTF-16 - это действительно неудобный формат кодирования (мы даже не собираемся касаться UCS-2, он устарел. Был надолго).

Что вам действительно нужно, так это получить текстовое значение из вашего HTML-элемента, Base64 закодировать его значение, а затем получить то, что получает, что данные распаковывают его как UTF8; не пытайтесь заставить JavaScript работать больше, чем нужно. Я предполагаю, что вы отправляете эти данные на сервер или что-то в этом роде: ваш серверный язык более сложный, чем JavaScript, и может распаковать текст примерно в миллион разных кодировок благодаря встроенным функциям. Так что просто используйте это. Don't solve Y for X.

+0

Мне нужно принимать высокие бит-символы (например, китайские иероглифы). UTF-8 не справится с этим, не так ли? –

+0

UTF8 - это кодировка для Unicode, а не «ее часть», так что да, это будет прекрасно. Это то, для чего он был создан для =) Забавный факт: UTF16 и UTF32 используют 16 и 32 бит на символ. UTF8 не использует 8 бит на символ, вместо этого он использует «как можно больше 8-битных блоков» –

+1

«То, что вам действительно нужно, это получить текстовое значение из вашего HTML-элемента, Base64 закодировать его значение». Вы не можете кодировать текст base64. Вы можете только base64 кодировать байтовый массив, поэтому существует некоторая неявная кодировка текста в массив байтов, который должен быть явным. Сначала вы выбираете байтовую кодировку для символов юникода (т. Е. UTF8, UTF16 и т. Д.), И как только вы кодируете все символы в массив байтов, тогда base64 кодирует это. – Triynko

Смежные вопросы