在javascript中将字符串编码为utf-16到base64

在javascript中将字符串编码为utf-16到base64,javascript,encoding,base64,utf-16,Javascript,Encoding,Base64,Utf 16,我很难在网上找到任何资源,这是令人担忧的。 我一直在读有关UCS-2和UTF-16的灾难,但我找不到解决方案 我需要从输入中获取一个值: var val = $('input').val() 并将其编码为base64,将文本视为utf-16,因此: this is a test 变成: dABoAGkAcwAgAGkAcwAgAGEAIAB0AGUAcwB0AA== 而不是下面的内容,您将其视为UTF-8: dGhpcyBpcyBhIHRlc3Q= 一旦读入JavaScript,您的数据

我很难在网上找到任何资源,这是令人担忧的。 我一直在读有关UCS-2和UTF-16的灾难,但我找不到解决方案

我需要从输入中获取一个值:

var val = $('input').val()
并将其编码为base64,将文本视为utf-16,因此:

this is a test
变成:

dABoAGkAcwAgAGkAcwAgAGEAIAB0AGUAcwB0AA==
而不是下面的内容,您将其视为UTF-8:

dGhpcyBpcyBhIHRlc3Q=

一旦读入JavaScript,您的数据将采用无编码的数字格式(严格来说,它必须采用Unicode规范化的形式C,但Unicode只是Unicode词典中每个字形的一系列标识号。它的编码更少)。因此:如果您特别需要将数据编码为UTF-16字节序列,请这样做,然后使用base64对其进行编码

但有趣的是:你需要哪种UTF-16?小端还是大端?有或没有BOM?UTF-16是一种非常不方便的编码格式(我们甚至不打算接触UCS-2,它已经过时了,已经很久了)


您真正需要的是从HTML元素中获取一个文本值,Base64对其值进行编码,然后将接收到的数据解压为UTF8;不要试图让JavaScript做更多的工作。我假设您正在将这些数据发送到服务器或其他什么东西,在这种情况下:您的服务器语言比JavaScript复杂得多,并且由于内置函数,可以将文本解压为大约一百万种不同的编码。所以就用这个

问题是什么?如何生成与UTF-8中相同的代码?我想我不需要接受高位字符(比如汉字)。UTF-8不能处理这个问题,是吗?UTF8是Unicode编码,不是“它的一部分”,所以它可以处理得很好。这就是它的设计目的=)有趣的事实:UTF16和UTF32每个字符使用16位和32位。UTF8不使用每个字符8位,而是“根据需要使用尽可能多的8位块”,“您真正需要的是从HTML元素中获取文本值,Base64对其值进行编码”。无法对文本进行base64编码。您只能对字节数组进行base64编码,因此必须显式地将文本隐式编码为字节数组。首先为unicode字符选择字节编码(即UTF8、UTF16等),然后将所有字符编码到字节数组中,然后对其进行base64编码。作为更正,您可以对任何字节序列(包括文本)进行base64编码。通过打开控制台并键入
btoa(“cats”)
,甚至
btoa(3)
,可以轻松地检查这一点。因为这些输入仅仅是字节,就像你们人类所认为的那样,所以它们可以很好地进行base64编码。唯一真正重要的是,接收器知道原始数据的编码方式,因此它会在以后做正确的事情(并且只有在需要非UTF8数据源时才这样做)