SQLite
データベースにデータをとして保存していますBINARY(16)
。その値は、32文字の16進文字列に対する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
ただし、私が抱えている問題は、のhex2bin
関数によって返されるデータを直接処理するときに、CN@[�4E����Y�y
ではなく文字列が与えられることですCN@[4EÀ¶ÃYûy
。これにより、32文字の16進数を生成するために使用できる必要があるため、2つの間で作業することができなくなります(コンテキストとして、WebアプリJavaScript
から取得したデータを処理するオフラインiPadアプリに電力を供給するために使用されます)。文字列をバイナリ文字列に変換し、's関数(および' s関数)で動作させます。PHP
JavaScript
PHP
hex2bin
SQLite
HEX
この問題は、バイナリ文字列がとして保存されているのに対し、をJavaScript
使用していると思います。それで、私の最初の考えは、文字列をに変換する必要があるということでした。Google検索を使用すると、ここに移動し、StackOverflowを検索すると、bobinceの回答がここに表示されます。どちらも、を使用することをお勧めします。ただし、これは必要なものを返します():UTF-16
utf8_unicode_ci
UTF-8
unescape(encodeURIComponent(str))
CN@[�4E����Y�y
// CN@[Â4EöÃYûy
unescape(encodeURIComponent('434e405b823445c09cb6c359fb1b7918'.hex2bin()))
それで、私の質問は次のとおりです。
JavaScript
16進文字列を2進文字列に変換するにはどうすればよいUTF-8
ですか?