我将数据存储在SQLite
数据库中BINARY(16)
,其值由32 个字符的十六进制字符串上PHP
的函数确定。hex2bin
例如,字符串434e405b823445c09cb6c359fb1b7918
返回CN@[4EÀ¶ÃYûy
.
存储在此数据库中的数据需要由 操作JavaScript
,为此我使用了以下函数(改编自Andris在此处的回答):
// Convert hexadecimal to binary string
String.prototype.hex2bin = function ()
{
// Define the variables
var i = 0, l = this.length - 1, bytes = []
// Iterate over the nibbles and convert to binary string
for (i; i < l; i += 2)
{
bytes.push(parseInt(this.substr(i, 2), 16))
}
// Return the binary string
return String.fromCharCode.apply(String, bytes)
}
这按预期工作,CN@[4EÀ¶ÃYûy
从434e405b823445c09cb6c359fb1b7918
.
然而,我遇到的问题是,当直接处理PHP
'shex2bin
函数返回的数据时,我得到的是字符串CN@[�4E����Y�y
而不是CN@[4EÀ¶ÃYûy
. 这使我无法在两者之间工作(对于上下文,JavaScript
它被用于为离线 iPad 应用程序供电,该应用程序与从PHP
Web 应用程序检索的数据一起工作),因为我需要能够JavaScript
生成 32 个字符的十六进制字符串,将其转换为二进制字符串,并使其与PHP
'hex2bin
函数(和SQLite
'HEX
函数)一起使用。
我相信这个问题是JavaScript
使用UTF-16
而二进制字符串存储为utf8_unicode_ci
. 然后,我最初的想法是我需要将字符串转换为UTF-8
. 使用谷歌搜索将我带到这里,搜索 StackOverflow 让我在这里找到bobince的答案,两者都推荐使用。但是,这确实返回了我需要的():unescape(encodeURIComponent(str))
CN@[�4E����Y�y
// CN@[Â4EöÃYûy
unescape(encodeURIComponent('434e405b823445c09cb6c359fb1b7918'.hex2bin()))
那么,我的问题是:
如何使用JavaScript
将十六进制字符串转换为UTF-8
二进制字符串?