-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
75 lines (63 loc) · 1.83 KB
/
index.js
File metadata and controls
75 lines (63 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env node
/**
* 修正UTF-7 エンコード・デコード関数
*
* https://qiita.com/tkooler_lufar/items/66b01f1a88c9e018f76e
* https://smdn.jp/programming/netfx/tips/modified_utf7/
*/
'use strict';
const iconv = require('iconv-lite');
const program = require('commander');
// コマンドライン引数処理
program.version('0.0.1')
.usage('文字列')
.description("与えられた文字列について、修正UTF7によるエンコード/デコードを行います")
.option("-d, --decode","修正UTF7文字列をデコードします");
program.parse(process.argv);
//console.log("optons: " + program.opts());
var args = program.args
if (!args || args.length == 0) {
console.log("no target string");
process.exit(1);
return;
}
//console.log("args: " + program.args);
if (program.decode) {
var decoded = decode(args[0]);
console.log(decoded);
return;
}
var encoded = encode(args[0])
console.log(encoded)
return;
/////////////////////////////////////
// 以下、関数
function encode(str) {
var encoded = str
.replace(/&/g, "&-")
.replace(/[\u0000-\u0019\u007f-\uffff]+/g, modifiedBase64Encode);
//console.log(encoded)
return encoded;
}
function decode(str) {
var decoded = str
.replace(/&([A-Za-z0-9\+\,]+)-/g, modifiedBase64Decode)
.replace(/&-/g, "&");
//console.log(decoded)
return decoded;
}
function modifiedBase64Encode(str) {
const buf = iconv.encode(str, "utf16-be");
//console.log(str);
//console.log(buf);
return "&"+ buf.toString("base64").replace(/\//g, ",").replace(/=/g, "") + "-";
}
function modifiedBase64Decode(str, substr) {
const buf = Buffer.from(substr.replace(/,/g, "/"), "base64")
//console.log(str);
//console.log(substr);
//console.log(buf);
const decoded = iconv.decode(buf, "utf16-be");
//console.log(decoded);
return decoded;
}