18. Utils
utilsオブジェクトは、ユーティリティ機能を提供する組み込みオブジェクトです。
機能概要:
- UTF-8エンコード/デコードをサポートします。
utils Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
utils.stringToUtf8bin() | 文字列データをUTF-8でエンコードします。 | 01.03.00+ | |
utils.utf8binToString() | バイナリデータをUTF-8でデコードします。 | 01.03.00+ |
Details
utils.stringToUtf8bin(data)
文字列データをUTF-8でエンコードします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string | mandatory | 文字列データ | |
return | ArrayBuffer | - | エンコードされたバイナリデータ | 異常が発生した時は、例外となります。 |
utils.utf8binToString(data[, offset[, length]])
バイナリデータをUTF-8でデコードします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | ArrayBuffer, Array[ArrayBuffer] | mandatory | バイナリデータ'ArrayBuffer' 又は'ArrayBuffer'の配列 を指定可能です。'ArrayBuffer'の配列 が指定された場合は、配列順にバイナリデータを連結してから、デコード処理を開始します。 | |
offset | number | optional | デコード開始位置オフセット 'data'に 'ArrayBuffer'の配列 を指定した場合は、バイナリデータを連結した後の全'data'に対するオフセットとなります。デフォルト値は0となります。 | 'length'を指定する場合は省略できません。 |
length | number | optional | デコード長[byte] デフォルト値は全'data'サイズからデコード開始位置オフセットを差し引いたサイズとなります。デフォルト値以下のサイズを指定する必要があります。 | 'offset'を指定した場合でも省略可能です。 |
return | {DecodedData}, undefined | - | {DecodedData} : デコードされたデータ デコードが失敗した場合はundefinedが返却されます。 | 異常が発生した時は、例外となります。 |
{DecodedData}
Name | Type | Summary | Note |
---|---|---|---|
.str | string | デコードされた文字列データ | |
.bin | ArrayBuffer | デコード対象のバイナリデータ末尾に1から3バイトまでの端数データが存在した場合に、端数データ部分をバイナリデータ出力します。 端数データが存在しない場合はundefinedとなります。 |
オブジェクトの使用例
Sample 1
UTF-8でエンコードしたデータを、オフセットを使用して分割デコードするサンプルです。
この例は、.utf8binToString()のオフセットとレングスを活用しています。
マルチバイト文字の切れ目を考慮せずに、分割可能であることを示しています。
var testStr_1 = 'Thank you Teşekkür ありがとう';
print(testStr_1);
var testEnc_1 = utils.stringToUtf8bin(testStr_1);
print(ab2Hex_00(testEnc_1));
var chunk = 7;
for(var n = 0; n < 20; n++) {
var testDec_1 = utils.utf8binToString(testEnc_1, 0, chunk + n);
print(('00' + n).substr(-2) + '_1:' + testDec_1['str']);
//if(testDec_1['bin']) print(ab2Hex_00(testDec_1['bin']));
var rest = testDec_1['bin'];
var len = 0;
if(rest) len = rest.byteLength;
var testDec_2 = utils.utf8binToString(testEnc_1, chunk + n - len);
print(('00' + n).substr(-2) + '_2:' + testDec_2['str']);
//if(testDec_2['bin']) print(ab2Hex_00(testDec_2['bin']));
}
function ab2Hex_00(ab) {
ret_str = '';
var a = new Uint8Array(ab);
for(var i = 0; i < a.length; i++) {
ret_str += ('00' + a[i].toString(16).toUpperCase()).substr(-2);
}
return ret_str;
}
Sample 2
UTF-8でエンコードしたデータを2つに分割し、個々にデコードするサンプルです。
この例は、デコード対象がストリームデータの場合に活用できます。
マルチバイト文字の切れ目を考慮せずに、分割可能であることを示しています。
var testStr_1 = 'Thank you Teşekkür ありがとう';
print(testStr_1);
var testEnc_1 = utils.stringToUtf8bin(testStr_1);
print(ab2Hex_00(testEnc_1));
var chunk = 7;
for(var n = 0; n < 20; n++) {
var chunk_1 = testEnc_1.slice(0, chunk + n);
var chunk_2 = testEnc_1.slice(chunk + n);
var testDec_1 = utils.utf8binToString(chunk_1);
print(('00' + n).substr(-2) + '_1:' + testDec_1['str']);
//if(testDec_1['bin']) print(ab2Hex_00(testDec_1['bin']));
var rest = testDec_1['bin'];
var testDec_2 = utils.utf8binToString([rest, chunk_2]);
print(('00' + n).substr(-2) + '_2:' + testDec_2['str']);
//if(testDec_2['bin']) print(ab2Hex_00(testDec_2['bin']));
}
function ab2Hex_00(ab) {
ret_str = '';
var a = new Uint8Array(ab);
for(var i = 0; i < a.length; i++) {
ret_str += ('00' + a[i].toString(16).toUpperCase()).substr(-2);
}
return ret_str;
}
Updated: 2021-05-06