胁肩累足按完藦多久才有效果

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
服务礼仪培训课件-微笑.ppt 153页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
微笑服务礼仪 课程安排 第一模块:微笑着认识自我
---服务礼仪新理念 第二模块:培养良好的工作意识 第三模块:服务人员仪容仪表 第四模块:服务人员仪态训练 第五模块:服务人员基本接待礼仪 第六模块:服务技巧 第七模块:服务用语 第八模块:电话礼仪
介绍游戏——叠罗汉 自我介绍要求:
姓名(怎么称呼) 工作时间 的职务(工作内容) 平时的爱好 最想学的礼仪内容
重复之前所有学员的姓名
注意眼神与微笑
行为循环的四个阶段 学习目标 培养高雅的仪表仪容
蕴育优美的行为举止
客户交往的基本常识 给您的建议
任何时候可以提出任何问题
Ask questions at any time
分享知识和经验
Share knowledge and experience
在学习中找到乐趣
Be happy in fun
第一模块 “微笑着认识自我”
——两大理念 一:关于礼仪 什么是礼仪 ? 什么是服务礼仪? 小问题:
你作为服务人员,陪同客人一起进门,是你先进,还是让客人先进? 礼仪的作用 内强个人素质
外塑企业形象
现代企业竞争的附加值
增进与他人的交往 成功学大师拿破仑希尔说: ——“世界上最廉价,而且能够得到最大收益的一种特质就是礼节。” 将礼仪成为一份内心的修养 做一个优雅的人先从
内心的尊重开始
礼仪的最高境界是内
心的淡定 二:关于微笑服务
美国希尔顿酒店的董事长唐纳.希尔顿曾经说过,酒店的第一流设备重要,而第一流的微笑更为重要,如果缺少服务人员的微笑,就好比花园失去了春日的阳光和春风。
微笑如盐 微笑是服务人员的第一项工作
微笑是可以训练的
带着笑容出现在顾客面前
微笑可以拉近彼此的距离
没有笑容就没有好的人际关系 微笑是服务人员的第一项工作 ——甜美的微笑能拉近彼此的距离
面对顾客目光友善,微笑真诚、亲切,表情自然
伴随微笑要露出6-8颗门牙、嘴角微微上翘
眼睛要礼貌正视顾客,不左顾右盼、心不在焉
有目光的接触即要送上甜美真诚的微笑 微笑的要素 成都光大银行职员
眼中含笑 服务意识与服务能力
什么是服务意识
服务意识与服务能力 案例分析—他为什么为难他
顾客慌忙跑进银行,营业厅里静悄悄,一个人也没有,ATM机前却排着长长的队伍。
营业员问:“先生,你取多少钱?”“3000元。”营业员,“对不起,请你到ATM机去取。”顾客这才看到窗口上贴着一纸规定,说为了减轻银行人员的劳动强度,取钱在5000元以下的,到自动取款机取。顾客只好对营业员解释说:“我有急事,能不能通融通融,先给我取了?”营业员正色到:“这是规定。”
顾客灵机一动,又把储蓄卡递给营业员。他有点生气“不是说让你到外面取吗?”顾客说“我取5000元!“这次营业员无话可说了,他乖乖地给顾客取了5000元。顾客从取出的钱里面抽出1000元,连同储蓄卡递给营业员:“存1000。”营业员张嘴想说什么,却什么也没有说出来。手续办完了,顾客又抽出1000元,“再存1000元…”营业员简直有些恼怒了:“你为何不一块存!”
“ 这是我的规定,我规定我自己一次只能存1000元,不能多存。” 思考:
如果你去消费,喜欢什么样的服务人员?
你是什么样的服务人员? 微笑服务意识
用心服务---假如我是消费者
主动服务---要做的正是对方正在想的
变通服务---工作标准是规范但顾客满
意才是目标
激情服务---不厌其烦的态度
小故事——101%的服务
有一次,一位顾客在肯德基用餐时,需要服务员为她拿起一把汤勺。服务生微笑着答应了。很快,那位员工回来了,手里却不见汤勺,只见一张洁净的白纸。顾客生气了!就在这时,那位员工伸出手掌,翻开纸巾的时候,顾客会心的笑了。因为她看到雪白的纸巾上静悄悄地躺着一把汤勺。 第二模块
“礼由心生,态度决定一切”
——培养良好的工作意识
想一想: 我为什么而工作? 我为谁而工作? 我应该怎么做呢? 态度=100%
如何分配?
职业态度 青蛙现象解析:
将一只青蛙扔进沸腾的开水锅里,它会马上跳出来逃生。而如果将它放在大锅里,里头加水再用小火慢慢加热,青蛙虽然可以感觉外界温度慢慢变化,却因惰性和没有立即往外跳的迫切动力,最后被热水煮熟而不自知。
企业竞争环境的改变大多是渐热式的,如果员工此孰视无睹,依旧我行我素、不求上进的话,久而久之,就会像这只青蛙
正在加载中,请稍后...项目语言:None
权限:read-only(如需更高权限请先加入项目)
Index: sbcs-codec.js
===================================================================
--- sbcs-codec.js (revision 0)
+++ sbcs-codec.js (revision 3)
@@ -0,0 +1,72 @@
+&use strict&
+// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that
+// correspond to encoded bytes (if 128 - then lower half is ASCII).
+exports._sbcs = SBCSC
+function SBCSCodec(codecOptions, iconv) {
if (!codecOptions)
throw new Error(&SBCS codec is called without the data.&)
// Prepare char buffer for decoding.
if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))
throw new Error(&Encoding '&+codecOptions.type+&' has incorrect 'chars' (must be of len 128 or 256)&);
if (codecOptions.chars.length === 128) {
var asciiString = &&;
for (var i = 0; i & 128; i++)
asciiString += String.fromCharCode(i);
codecOptions.chars = asciiString + codecOptions.
this.decodeBuf = new Buffer(codecOptions.chars, 'ucs2');
// Encoding buffer.
var encodeBuf = new Buffer(65536);
encodeBuf.fill(iconv.defaultCharSingleByte.charCodeAt(0));
for (var i = 0; i & codecOptions.chars. i++)
encodeBuf[codecOptions.chars.charCodeAt(i)] =
this.encodeBuf = encodeB
+SBCSCodec.prototype.encoder = SBCSE
+SBCSCodec.prototype.decoder = SBCSD
+function SBCSEncoder(options, codec) {
this.encodeBuf = codec.encodeB
+SBCSEncoder.prototype.write = function(str) {
var buf = new Buffer(str.length);
for (var i = 0; i & str. i++)
buf[i] = this.encodeBuf[str.charCodeAt(i)];
+SBCSEncoder.prototype.end = function() {
+function SBCSDecoder(options, codec) {
this.decodeBuf = codec.decodeB
+SBCSDecoder.prototype.write = function(buf) {
// Strings are immutable in JS -& we use ucs2 buffer to speed up computations.
var decodeBuf = this.decodeB
var newBuf = new Buffer(buf.length*2);
var idx1 = 0, idx2 = 0;
for (var i = 0; i & buf. i++) {
idx1 = buf[i]*2; idx2 = i*2;
newBuf[idx2] = decodeBuf[idx1];
newBuf[idx2+1] = decodeBuf[idx1+1];
return newBuf.toString('ucs2');
+SBCSDecoder.prototype.end = function() {
Index: utf16.js
===================================================================
--- utf16.js (revision 0)
+++ utf16.js (revision 3)
@@ -0,0 +1,174 @@
+&use strict&
+// == UTF16-BE codec. ==========================================================
+exports.utf16be = Utf16BEC
+function Utf16BECodec() {
+Utf16BECodec.prototype.encoder = Utf16BEE
+Utf16BECodec.prototype.decoder = Utf16BED
+Utf16BECodec.prototype.bomAware =
+// -- Encoding
+function Utf16BEEncoder() {
+Utf16BEEncoder.prototype.write = function(str) {
var buf = new Buffer(str, 'ucs2');
for (var i = 0; i & buf. i += 2) {
var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] =
+Utf16BEEncoder.prototype.end = function() {
+// -- Decoding
+function Utf16BEDecoder() {
this.overflowByte = -1;
+Utf16BEDecoder.prototype.write = function(buf) {
if (buf.length == 0)
return '';
var buf2 = new Buffer(buf.length + 1),
i = 0, j = 0;
if (this.overflowByte !== -1) {
buf2[0] = buf[0];
buf2[1] = this.overflowB
i = 1; j = 2;
for (; i & buf.length-1; i += 2, j+= 2) {
buf2[j] = buf[i+1];
buf2[j+1] = buf[i];
this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;
return buf2.slice(0, j).toString('ucs2');
+Utf16BEDecoder.prototype.end = function() {
+// == UTF-16 codec =============================================================
+// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.
+// Defaults to UTF-16LE, as it's prevalent and default in Node.
+// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le
+// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});
+// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).
+exports.utf16 = Utf16C
+function Utf16Codec(codecOptions, iconv) {
this.iconv =
+Utf16Codec.prototype.encoder = Utf16E
+Utf16Codec.prototype.decoder = Utf16D
+// -- Encoding (pass-through)
+function Utf16Encoder(options, codec) {
options = options || {};
if (options.addBOM === undefined)
options.addBOM =
this.encoder = codec.iconv.getEncoder('utf-16le', options);
+Utf16Encoder.prototype.write = function(str) {
return this.encoder.write(str);
+Utf16Encoder.prototype.end = function() {
return this.encoder.end();
+// -- Decoding
+function Utf16Decoder(options, codec) {
this.decoder =
this.initialBytes = [];
this.initialBytesLen = 0;
this.options = options || {};
this.iconv = codec.
+Utf16Decoder.prototype.write = function(buf) {
if (!this.decoder) {
// Codec is not chosen yet. Accumulate initial bytes.
this.initialBytes.push(buf);
this.initialBytesLen += buf.
if (this.initialBytesLen & 16) // We need more bytes to use space heuristic (see below)
return '';
// We have enough bytes -& detect endianness.
var buf = Buffer.concat(this.initialBytes),
encoding = detectEncoding(buf, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
this.initialBytes.length = this.initialBytesLen = 0;
return this.decoder.write(buf);
+Utf16Decoder.prototype.end = function() {
if (!this.decoder) {
var buf = Buffer.concat(this.initialBytes),
encoding = detectEncoding(buf, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var res = this.decoder.write(buf),
trail = this.decoder.end();
return trail ? (res + trail) :
return this.decoder.end();
+function detectEncoding(buf, defaultEncoding) {
var enc = defaultEncoding || 'utf-16le';
if (buf.length &= 2) {
// Check BOM.
if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM
enc = 'utf-16be';
else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM
enc = 'utf-16le';
// No BOM found. Try to deduce encoding from initial content.
// Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.
// So, we count ASCII as if it was LE or BE, and decide from that.
var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions
_len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.
for (var i = 0; i & _ i += 2) {
if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;
if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;
if (asciiCharsBE & asciiCharsLE)
enc = 'utf-16be';
else if (asciiCharsBE & asciiCharsLE)
enc = 'utf-16le';
Index: utf7.js
===================================================================
--- utf7.js (revision 0)
+++ utf7.js (revision 3)
@@ -0,0 +1,289 @@
+&use strict&
+// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152
+// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3
+exports.utf7 = Utf7C
+exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7
+function Utf7Codec(codecOptions, iconv) {
this.iconv =
+Utf7Codec.prototype.encoder = Utf7E
+Utf7Codec.prototype.decoder = Utf7D
+Utf7Codec.prototype.bomAware =
+// -- Encoding
+var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
+function Utf7Encoder(options, codec) {
this.iconv = codec.
+Utf7Encoder.prototype.write = function(str) {
// Naive implementation.
// Non-direct chars are encoded as &+&base64&-&; single &+& char is encoded as &+-&.
return new Buffer(str.replace(nonDirectChars, function(chunk) {
return &+& + (chunk === '+' ? '' :
this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, ''))
}.bind(this)));
+Utf7Encoder.prototype.end = function() {
+// -- Decoding
+function Utf7Decoder(options, codec) {
this.iconv = codec.
this.inBase64 =
this.base64Accum = '';
+var base64Regex = /[A-Za-z0-9\/+]/;
+var base64Chars = [];
+for (var i = 0; i & 256; i++)
base64Chars[i] = base64Regex.test(String.fromCharCode(i));
+var plusChar = '+'.charCodeAt(0),
minusChar = '-'.charCodeAt(0),
andChar = '&'.charCodeAt(0);
+Utf7Decoder.prototype.write = function(buf) {
var res = &&, lastI = 0,
inBase64 = this.inBase64,
base64Accum = this.base64A
// The decoder is more involved as we must handle chunks in stream.
for (var i = 0; i & buf. i++) {
if (!inBase64) { // We're in direct mode.
// Write direct chars until '+'
if (buf[i] == plusChar) {
res += this.iconv.decode(buf.slice(lastI, i), &ascii&); // Write direct chars.
lastI = i+1;
inBase64 =
} else { // We decode base64.
if (!base64Chars[buf[i]]) { // Base64 ended.
if (i == lastI && buf[i] == minusChar) {// &+-& -& &+&
res += &+&;
var b64str = base64Accum + buf.slice(lastI, i).toString();
res += this.iconv.decode(new Buffer(b64str, 'base64'), &utf16-be&);
if (buf[i] != minusChar) // Minus is absorbed after base64.
lastI = i+1;
inBase64 =
base64Accum = '';
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), &ascii&); // Write direct chars.
var b64str = base64Accum + buf.slice(lastI).toString();
var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -& 2x3 bytes -& 3 chars.
base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(new Buffer(b64str, 'base64'), &utf16-be&);
this.inBase64 = inBase64;
this.base64Accum = base64A
+Utf7Decoder.prototype.end = function() {
var res = &&;
if (this.inBase64 && this.base64Accum.length & 0)
res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), &utf16-be&);
this.inBase64 =
this.base64Accum = '';
+// UTF-7-IMAP codec.
+// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)
+// Differences:
* Base64 part is started by &&& instead of &+&
* Direct characters are 0x20-0x7E, except &&& (0x26)
* In Base64, &,& is used instead of &/&
* Base64 must not be used to represent direct characters.
* No implicit shift back from Base64 (should always end with '-')
* String must end in non-shifted position.
* &-&& while in base64 is not allowed.
+exports.utf7imap = Utf7IMAPC
+function Utf7IMAPCodec(codecOptions, iconv) {
this.iconv =
+Utf7IMAPCodec.prototype.encoder = Utf7IMAPE
+Utf7IMAPCodec.prototype.decoder = Utf7IMAPD
+Utf7IMAPCodec.prototype.bomAware =
+// -- Encoding
+function Utf7IMAPEncoder(options, codec) {
this.iconv = codec.
this.inBase64 =
this.base64Accum = new Buffer(6);
this.base64AccumIdx = 0;
+Utf7IMAPEncoder.prototype.write = function(str) {
var inBase64 = this.inBase64,
base64Accum = this.base64Accum,
base64AccumIdx = this.base64AccumIdx,
buf = new Buffer(str.length*5 + 10), bufIdx = 0;
for (var i = 0; i & str. i++) {
var uChar = str.charCodeAt(i);
if (0x20 &= uChar && uChar &= 0x7E) { // Direct character or '&'.
if (inBase64) {
if (base64AccumIdx & 0) {
bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx);
base64AccumIdx = 0;
buf[bufIdx++] = minusC // Write '-', then go to direct mode.
inBase64 =
if (!inBase64) {
buf[bufIdx++] = uC // Write direct character
if (uChar === andChar)
// Ampersand -& '&-'
buf[bufIdx++] = minusC
} else { // Non-direct character
if (!inBase64) {
buf[bufIdx++] = andC // Write '&', then go to base64 mode.
inBase64 =
if (inBase64) {
base64Accum[base64AccumIdx++] = uChar && 8;
base64Accum[base64AccumIdx++] = uChar & 0xFF;
if (base64AccumIdx == base64Accum.length) {
bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx);
base64AccumIdx = 0;
this.inBase64 = inBase64;
this.base64AccumIdx = base64AccumI
return buf.slice(0, bufIdx);
+Utf7IMAPEncoder.prototype.end = function() {
var buf = new Buffer(10), bufIdx = 0;
if (this.inBase64) {
if (this.base64AccumIdx & 0) {
bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx);
this.base64AccumIdx = 0;
buf[bufIdx++] = minusC // Write '-', then go to direct mode.
this.inBase64 =
return buf.slice(0, bufIdx);
+// -- Decoding
+function Utf7IMAPDecoder(options, codec) {
this.iconv = codec.
this.inBase64 =
this.base64Accum = '';
+var base64IMAPChars = base64Chars.slice();
+base64IMAPChars[','.charCodeAt(0)] =
+Utf7IMAPDecoder.prototype.write = function(buf) {
var res = &&, lastI = 0,
inBase64 = this.inBase64,
base64Accum = this.base64A
// The decoder is more involved as we must handle chunks in stream.
// It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).
for (var i = 0; i & buf. i++) {
if (!inBase64) { // We're in direct mode.
// Write direct chars until '&'
if (buf[i] == andChar) {
res += this.iconv.decode(buf.slice(lastI, i), &ascii&); // Write direct chars.
lastI = i+1;
inBase64 =
} else { // We decode base64.
if (!base64IMAPChars[buf[i]]) { // Base64 ended.
if (i == lastI && buf[i] == minusChar) { // &&-& -& &&&
res += &&&;
var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');
res += this.iconv.decode(new Buffer(b64str, 'base64'), &utf16-be&);
if (buf[i] != minusChar) // Minus may be absorbed after base64.
lastI = i+1;
inBase64 =
base64Accum = '';
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), &ascii&); // Write direct chars.
var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');
var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -& 2x3 bytes -& 3 chars.
base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(new Buffer(b64str, 'base64'), &utf16-be&);
this.inBase64 = inBase64;
this.base64Accum = base64A
+Utf7IMAPDecoder.prototype.end = function() {
var res = &&;
if (this.inBase64 && this.base64Accum.length & 0)
res = this.iconv.decode(new Buffer(this.base64Accum, 'base64'), &utf16-be&);
this.inBase64 =
this.base64Accum = '';
Index: dbcs-codec.js
===================================================================
--- dbcs-codec.js (revision 0)
+++ dbcs-codec.js (revision 3)
@@ -0,0 +1,554 @@
+&use strict&
+// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.
+// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.
+// To save memory and loading time, we read table files only when requested.
+exports._dbcs = DBCSC
+var UNASSIGNED = -1,
GB18030_CODE = -2,
NODE_START = -1000,
UNASSIGNED_NODE = new Array(0x100),
DEF_CHAR = -1;
+for (var i = 0; i & 0x100; i++)
UNASSIGNED_NODE[i] = UNASSIGNED;
+// Class DBCSCodec reads and initializes mapping tables.
+function DBCSCodec(codecOptions, iconv) {
this.encodingName = codecOptions.encodingN
if (!codecOptions)
throw new Error(&DBCS codec is called without the data.&)
if (!codecOptions.table)
throw new Error(&Encoding '& + this.encodingName + &' has no data.&);
// Load tables.
var mappingTable = codecOptions.table();
// Decode tables: MBCS -& Unicode.
// decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.
// Trie root is decodeTables[0].
// Values: &=
0 -& unicode character code. can be & 0xFFFF
== UNASSIGNED -& unknown/unassigned sequence.
== GB18030_CODE -& this is the end of a GB18030 4-byte sequence.
&= NODE_START -& index of the next node in our trie to process next byte.
&= SEQ_START
-& index of the start of a character code sequence, in decodeTableSeq.
this.decodeTables = [];
this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.
// Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here.
this.decodeTableSeq = [];
// Actual mapping tables consist of chunks. Use them to fill up decode tables.
for (var i = 0; i & mappingTable. i++)
this._addDecodeChunk(mappingTable[i]);
this.defaultCharUnicode = iconv.defaultCharU
// Encode tables: Unicode -& DBCS.
// `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.
// Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.
// Values: &=
0 -& it is a normal char. Write the value (if &=256 then 1 byte, if &=65536 then 2 bytes, etc.).
== UNASSIGNED -& no conversion found. Output a default char.
&= SEQ_START
-& it's an index in encodeTableSeq, see below. The character starts a sequence.
this.encodeTable = [];
// `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of
// objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key
// means end of sequence (needed when one sequence is a strict subsequence of another).
// Objects are kept separately from encodeTable to increase performance.
this.encodeTableSeq = [];
// Some chars can be decoded, but need not be encoded.
var skipEncodeChars = {};
if (codecOptions.encodeSkipVals)
for (var i = 0; i & codecOptions.encodeSkipVals. i++) {
var val = codecOptions.encodeSkipVals[i];
if (typeof val === 'number')
skipEncodeChars[val] =
for (var j = val. j &= val. j++)
skipEncodeChars[j] =
// Use decode trie to recursively fill out encode tables.
this._fillEncodeTable(0, 0, skipEncodeChars);
// Add more encoding pairs when needed.
if (codecOptions.encodeAdd) {
for (var uChar in codecOptions.encodeAdd)
if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))
this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
this.defCharSB
= this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];
if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];
if (this.defCharSB === UNASSIGNED) this.defCharSB = &?&.charCodeAt(0);
// Load & create GB18030 tables when needed.
if (typeof codecOptions.gb18030 === 'function') {
this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.
// Add GB18030 decode tables.
var thirdByteNodeIdx = this.decodeTables.
var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);
var fourthByteNodeIdx = this.decodeTables.
var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);
for (var i = 0x81; i &= 0xFE; i++) {
var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];
var secondByteNode = this.decodeTables[secondByteNodeIdx];
for (var j = 0x30; j &= 0x39; j++)
secondByteNode[j] = NODE_START - thirdByteNodeI
for (var i = 0x81; i &= 0xFE; i++)
thirdByteNode[i] = NODE_START - fourthByteNodeI
for (var i = 0x30; i &= 0x39; i++)
fourthByteNode[i] = GB18030_CODE
+DBCSCodec.prototype.encoder = DBCSE
+DBCSCodec.prototype.decoder = DBCSD
+// Decoder helpers
+DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
var bytes = [];
for (; addr & 0; addr &&= 8)
bytes.push(addr & 0xFF);
if (bytes.length == 0)
bytes.push(0);
var node = this.decodeTables[0];
for (var i = bytes.length-1; i & 0; i--) { // Traverse nodes deeper into the trie.
var val = node[bytes[i]];
if (val == UNASSIGNED) { // Create new node.
node[bytes[i]] = NODE_START - this.decodeTables.
this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
else if (val &= NODE_START) { // Existing node.
node = this.decodeTables[NODE_START - val];
throw new Error(&Overwrite byte in & + this.encodingName + &, addr: & + addr.toString(16));
+DBCSCodec.prototype._addDecodeChunk = function(chunk) {
// First element of chunk is the hex mbcs code where we start.
var curAddr = parseInt(chunk[0], 16);
// Choose the decoding node where we'll write our chars.
var writeTable = this._getDecodeTrieNode(curAddr);
curAddr = curAddr & 0xFF;
// Write all other elements of the chunk to the table.
for (var k = 1; k & chunk. k++) {
var part = chunk[k];
if (typeof part === &string&) { // String, write as-is.
for (var l = 0; l & part.) {
var code = part.charCodeAt(l++);
if (0xD800 &= code && code & 0xDC00) { // Decode surrogate
var codeTrail = part.charCodeAt(l++);
if (0xDC00 &= codeTrail && codeTrail & 0xE000)
writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);
throw new Error(&Incorrect surrogate pair in &
+ this.encodingName + & at chunk & + chunk[0]);
else if (0x0FF0 & code && code &= 0x0FFF) { // Character sequence (our own encoding used)
var len = 0xFFF - code + 2;
var seq = [];
for (var m = 0; m & m++)
seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.
writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.
this.decodeTableSeq.push(seq);
writeTable[curAddr++] = // Basic char
else if (typeof part === &number&) { // Integer, meaning increasing sequence starting with prev character.
var charCode = writeTable[curAddr - 1] + 1;
for (var l = 0; l & l++)
writeTable[curAddr++] = charCode++;
throw new Error(&Incorrect type '& + typeof part + &' given in &
+ this.encodingName + & at chunk & + chunk[0]);
if (curAddr & 0xFF)
throw new Error(&Incorrect chunk in &
+ this.encodingName + & at addr & + chunk[0] + &: too long& + curAddr);
+// Encoder helpers
+DBCSCodec.prototype._getEncodeBucket = function(uCode) {
var high = uCode && 8; // This could be & 0xFF because of astral characters.
if (this.encodeTable[high] === undefined)
this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.
return this.encodeTable[high];
+DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 0xFF;
if (bucket[low] &= SEQ_START)
this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsC // There's already a sequence, set a single-char subsequence of it.
else if (bucket[low] == UNASSIGNED)
bucket[low] = dbcsC
+DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
// Get the root of character tree according to first character of the sequence.
var uCode = seq[0];
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 0xFF;
if (bucket[low] &= SEQ_START) {
// There's already a sequence with
node = this.encodeTableSeq[SEQ_START-bucket[low]];
// There was no sequence object - allocate a new one.
node = {};
if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.
bucket[low] = SEQ_START - this.encodeTableSeq.
this.encodeTableSeq.push(node);
// Traverse the character tree, allocating new nodes as needed.
for (var j = 1; j & seq.length-1; j++) {
var oldVal = node[uCode];
if (typeof oldVal === 'object')
node = oldV
node = node[uCode] = {}
if (oldVal !== undefined)
node[DEF_CHAR] = oldVal
// Set the leaf to given dbcsCode.
uCode = seq[seq.length-1];
node[uCode] = dbcsC
+DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
var node = this.decodeTables[nodeIdx];
for (var i = 0; i & 0x100; i++) {
var uCode = node[i];
var mbCode = prefix +
if (skipEncodeChars[mbCode])
if (uCode &= 0)
this._setEncodeChar(uCode, mbCode);
else if (uCode &= NODE_START)
this._fillEncodeTable(NODE_START - uCode, mbCode && 8, skipEncodeChars);
else if (uCode &= SEQ_START)
this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
+// == Encoder ==================================================================
+function DBCSEncoder(options, codec) {
// Encoder state
this.leadSurrogate = -1;
this.seqObj =
// Static data
this.encodeTable = codec.encodeT
this.encodeTableSeq = codec.encodeTableS
this.defaultCharSingleByte = codec.defCharSB;
this.gb18030 = codec.gb18030;
+DBCSEncoder.prototype.write = function(str) {
var newBuf = new Buffer(str.length * (this.gb18030 ? 4 : 3)),
leadSurrogate = this.leadSurrogate,
seqObj = this.seqObj, nextChar = -1,
i = 0, j = 0;
while (true) {
// 0. Get next character.
if (nextChar === -1) {
if (i == str.length)
var uCode = str.charCodeAt(i++);
var uCode = nextC
nextChar = -1;
// 1. Handle surrogates.
if (0xD800 &= uCode && uCode & 0xE000) { // Char is one of surrogates.
if (uCode & 0xDC00) { // We've got lead surrogate.
if (leadSurrogate === -1) {
leadSurrogate = uC
leadSurrogate = uC
// Double lead surrogate found.
uCode = UNASSIGNED;
} else { // We've got trail surrogate.
if (leadSurrogate !== -1) {
uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);
leadSurrogate = -1;
// Incomplete surrogate pair - only trail surrogate found.
uCode = UNASSIGNED;
else if (leadSurrogate !== -1) {
// Incomplete surrogate pair - only lead surrogate found.
nextChar = uC uCode = UNASSIGNED; // Write an error, then current char.
leadSurrogate = -1;
// 2. Convert uCode character.
var dbcsCode = UNASSIGNED;
if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence
var resCode = seqObj[uCode];
if (typeof resCode === 'object') { // Sequence continues.
seqObj = resC
} else if (typeof resCode == 'number') { // Sequence finished. Write it.
dbcsCode = resC
} else if (resCode == undefined) { // Current character is not part of the sequence.
// Try default character for this sequence
resCode = seqObj[DEF_CHAR];
if (resCode !== undefined) {
dbcsCode = resC // Found. Write it.
nextChar = uC // Current character will be written too in the next iteration.
// TODO: What if we have no default? (resCode == undefined)
// Then, we should write first char of the sequence as-is and try the rest recursively.
// Didn't do it for now because no encoding has this situation yet.
// Currently, just skip the sequence and write current char.
else if (uCode &= 0) {
// Regular character
var subtable = this.encodeTable[uCode && 8];
if (subtable !== undefined)
dbcsCode = subtable[uCode & 0xFF];
if (dbcsCode &= SEQ_START) { // Sequence start
seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];
if (dbcsCode == UNASSIGNED && this.gb18030) {
// Use GB18030 algorithm to find character(s) to write.
var idx = findIdx(this.gb18030.uChars, uCode);
if (idx != -1) {
var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;
newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;
newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;
newBuf[j++] = 0x30 + dbcsC
// 3. Write dbcsCode character.
if (dbcsCode === UNASSIGNED)
dbcsCode = this.defaultCharSingleB
if (dbcsCode & 0x100) {
newBuf[j++] = dbcsC
else if (dbcsCode & 0x10000) {
newBuf[j++] = dbcsCode && 8;
// high byte
newBuf[j++] = dbcsCode & 0xFF; // low byte
newBuf[j++] = dbcsCode && 16;
newBuf[j++] = (dbcsCode && 8) & 0xFF;
newBuf[j++] = dbcsCode & 0xFF;
this.seqObj = seqO
this.leadSurrogate = leadS
return newBuf.slice(0, j);
+DBCSEncoder.prototype.end = function() {
if (this.leadSurrogate === -1 && this.seqObj === undefined)
+ // All clean. Most often case.
var newBuf = new Buffer(10), j = 0;
if (this.seqObj) { // We're in the sequence.
var dbcsCode = this.seqObj[DEF_CHAR];
if (dbcsCode !== undefined) { // Write beginning of the sequence.
if (dbcsCode & 0x100) {
newBuf[j++] = dbcsC
newBuf[j++] = dbcsCode && 8;
// high byte
newBuf[j++] = dbcsCode & 0xFF; // low byte
// See todo above.
this.seqObj =
if (this.leadSurrogate !== -1) {
// Incomplete surrogate pair - only lead surrogate found.
newBuf[j++] = this.defaultCharSingleB
this.leadSurrogate = -1;
return newBuf.slice(0, j);
+// Export for testing
+DBCSEncoder.prototype.findIdx = findI
+// == Decoder ==================================================================
+function DBCSDecoder(options, codec) {
// Decoder state
this.nodeIdx = 0;
this.prevBuf = new Buffer(0);
// Static data
this.decodeTables = codec.decodeT
this.decodeTableSeq = codec.decodeTableS
this.defaultCharUnicode = codec.defaultCharU
this.gb18030 = codec.gb18030;
+DBCSDecoder.prototype.write = function(buf) {
var newBuf = new Buffer(buf.length*2),
nodeIdx = this.nodeIdx,
prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,
seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.
if (prevBufOffset & 0) // Make prev buf overlap a little to make it easier to slice later.
prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);
for (var i = 0, j = 0; i & buf. i++) {
var curByte = (i &= 0) ? buf[i] : prevBuf[i + prevBufOffset];
// Lookup in current trie node.
var uCode = this.decodeTables[nodeIdx][curByte];
if (uCode &= 0) {
// Normal character, just use it.
else if (uCode === UNASSIGNED) { // Unknown char.
// TODO: Callback with seq.
//var curSeq = (seqStart &= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);
i = seqS // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).
uCode = this.defaultCharUnicode.charCodeAt(0);
else if (uCode === GB18030_CODE) {
var curSeq = (seqStart &= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);
var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);
var idx = findIdx(this.gb18030.gbChars, ptr);
uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
else if (uCode &= NODE_START) { // Go to next trie node.
nodeIdx = NODE_START - uC
else if (uCode &= SEQ_START) { // Output a sequence of chars.
var seq = this.decodeTableSeq[SEQ_START - uCode];
for (var k = 0; k & seq.length - 1; k++) {
uCode = seq[k];
newBuf[j++] = uCode & 0xFF;
newBuf[j++] = uCode && 8;
uCode = seq[seq.length-1];
throw new Error(&iconv-lite internal error: invalid decoding table value & + uCode + & at & + nodeIdx + &/& + curByte);
// Write the character to buffer, handling higher planes using surrogate pair.
if (uCode & 0xFFFF) {
uCode -= 0x10000;
var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);
newBuf[j++] = uCodeLead & 0xFF;
newBuf[j++] = uCodeLead && 8;
uCode = 0xDC00 + uCode % 0x400;
newBuf[j++] = uCode & 0xFF;
newBuf[j++] = uCode && 8;
// Reset trie node.
nodeIdx = 0; seqStart = i+1;
this.nodeIdx = nodeI
this.prevBuf = (seqStart &= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);
return newBuf.slice(0, j).toString('ucs2');
+DBCSDecoder.prototype.end = function() {
var ret = '';
// Try to parse all remaining chars.
while (this.prevBuf.length & 0) {
// Skip 1 character in the buffer.
ret += this.defaultCharU
var buf = this.prevBuf.slice(1);
// Parse remaining as usual.
this.prevBuf = new Buffer(0);
this.nodeIdx = 0;
if (buf.length & 0)
ret += this.write(buf);
this.nodeIdx = 0;
+// Binary search for GB18030. Returns largest i such that table[i] &= val.
+function findIdx(table, val) {
if (table[0] & val)
return -1;
var l = 0, r = table.
while (l & r-1) { // always table[l] &= val & table[r]
var mid = l + Math.floor((r-l+1)/2);
if (table[mid] &= val)
Index: index.js
===================================================================
--- index.js (revision 0)
+++ index.js (revision 3)
@@ -0,0 +1,22 @@
+&use strict&
+// Update this array if you add/rename/remove files in this directory.
+// We support Browserify by skipping automatic module discovery and requiring modules directly.
+var modules = [
require(&./internal&),
require(&./utf16&),
require(&./utf7&),
require(&./sbcs-codec&),
require(&./sbcs-data&),
require(&./sbcs-data-generated&),
require(&./dbcs-codec&),
require(&./dbcs-data&),
+// Put all encoding/alias/codec definitions to single object and export it.
+for (var i = 0; i & modules. i++) {
var module = modules[i];
for (var enc in module)
if (Object.prototype.hasOwnProperty.call(module, enc))
exports[enc] = module[enc];
Index: internal.js
===================================================================
--- internal.js (revision 0)
+++ internal.js (revision 3)
@@ -0,0 +1,119 @@
+&use strict&
+// Export Node.js internal encodings.
+module.exports = {
// Encodings
{ type: &_internal&, bomAware: true},
{ type: &_internal&, bomAware: true},
unicode11utf8: &utf8&,
{ type: &_internal&, bomAware: true},
utf16le: &ucs2&,
binary: { type: &_internal& },
base64: { type: &_internal& },
{ type: &_internal& },
_internal: InternalCodec,
+//------------------------------------------------------------------------------
+function InternalCodec(codecOptions) {
this.enc = codecOptions.encodingN
this.bomAware = codecOptions.bomA
if (this.enc === &base64&)
this.encoder = InternalEncoderBase64;
else if (this.enc === &cesu8&) {
this.enc = &utf8&; // Use utf8 for decoding.
this.encoder = InternalEncoderCesu8;
+InternalCodec.prototype.encoder = InternalE
+InternalCodec.prototype.decoder = InternalD
+//------------------------------------------------------------------------------
+// We use node.js internal decoder. It's signature is the same as ours.
+var StringDecoder = require('string_decoder').StringD
+if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.
StringDecoder.prototype.end = function() {};
+function InternalDecoder(options, codec) {
StringDecoder.call(this, codec.enc);
+InternalDecoder.prototype = StringDecoder.
+//------------------------------------------------------------------------------
+// Encoder is mostly trivial
+function InternalEncoder(options, codec) {
this.enc = codec.
+InternalEncoder.prototype.write = function(str) {
return new Buffer(str, this.enc);
+InternalEncoder.prototype.end = function() {
+//------------------------------------------------------------------------------
+// Except base64 encoder, which must keep its state.
+function InternalEncoderBase64(options, codec) {
this.prevStr = '';
+InternalEncoderBase64.prototype.write = function(str) {
str = this.prevStr +
var completeQuads = str.length - (str.length % 4);
this.prevStr = str.slice(completeQuads);
str = str.slice(0, completeQuads);
return new Buffer(str, &base64&);
+InternalEncoderBase64.prototype.end = function() {
return new Buffer(this.prevStr, &base64&);
+//------------------------------------------------------------------------------
+// CESU-8 encoder is also special.
+function InternalEncoderCesu8(options, codec) {
+InternalEncoderCesu8.prototype.write = function(str) {
var buf = new Buffer(str.length * 3), bufIdx = 0;
for (var i = 0; i & str. i++) {
var charCode = str.charCodeAt(i);
// Naive implementation, but it works because CESU-8 is especially easy
// to convert from UTF-16 (which all JS strings are encoded in).
if (charCode & 0x80)
buf[bufIdx++] = charC
else if (charCode & 0x800) {
buf[bufIdx++] = 0xC0 + (charCode &&& 6);
buf[bufIdx++] = 0x80 + (charCode & 0x3f);
else { // charCode will always be & 0x10000 in javascript.
buf[bufIdx++] = 0xE0 + (charCode &&& 12);
buf[bufIdx++] = 0x80 + ((charCode &&& 6) & 0x3f);
buf[bufIdx++] = 0x80 + (charCode & 0x3f);
return buf.slice(0, bufIdx);
+InternalEncoderCesu8.prototype.end = function() {
Index: sbcs-data-generated.js
===================================================================
--- sbcs-data-generated.js (revision 0)
+++ sbcs-data-generated.js (revision 3)
@@ -0,0 +1,451 @@
+&use strict&
+// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.
+module.exports = {
&437&: &cp437&,
&737&: &cp737&,
&775&: &cp775&,
&850&: &cp850&,
&852&: &cp852&,
&855&: &cp855&,
&856&: &cp856&,
&857&: &cp857&,
&858&: &cp858&,
&860&: &cp860&,
&861&: &cp861&,
&862&: &cp862&,
&863&: &cp863&,
&864&: &cp864&,
&865&: &cp865&,
&866&: &cp866&,
&869&: &cp869&,
&874&: &windows874&,
&922&: &cp922&,
&1046&: &cp1046&,
&1124&: &cp1124&,
&1125&: &cp1125&,
&1129&: &cp1129&,
&1133&: &cp1133&,
&1161&: &cp1161&,
&1162&: &cp1162&,
&1163&: &cp1163&,
&1250&: &windows1250&,
&1251&: &windows1251&,
&1252&: &windows1252&,
&1253&: &windows1253&,
&1254&: &windows1254&,
&1255&: &windows1255&,
&1256&: &windows1256&,
&1257&: &windows1257&,
&1258&: &windows1258&,
&28591&: &iso88591&,
&28592&: &iso88592&,
&28593&: &iso88593&,
&28594&: &iso88594&,
&28595&: &iso88595&,
&28596&: &iso88596&,
&28597&: &iso88597&,
&28598&: &iso88598&,
&28599&: &iso88599&,
&28600&: &iso885910&,
&28601&: &iso885911&,
&28603&: &iso885913&,
&28604&: &iso885914&,
&28605&: &iso885915&,
&28606&: &iso885916&,
&windows874&: {
&type&: &_sbcs&,
&chars&: &EUR????…???????????‘’“”o–—???????? ???????????????????????????????????????????????????????????????????????????????????????????????&
&win874&: &windows874&,
&cp874&: &windows874&,
&windows1250&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+??‰????? ˇ??¤??§¨(C)?<>???????????????????????????×???????ss?á???????é??ěí???ńňó???÷??ú?ü??˙&
&win1250&: &windows1250&,
&cp1250&: &windows1250&,
&windows1251&: {
&type&: &_sbcs&,
&chars&: &??,?,,…+?EUR‰????? ???¤??§Ё(C)?<>????АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя&
&win1251&: &windows1251&,
&cp1251&: &windows1251&,
&windows1252&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&win1252&: &windows1252&,
&cp1252&: &windows1252&,
&windows1253&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+??‰????? ???¤??§¨(C)?<>? 1/2 ???ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩ???????αβγδεζηθικλμνξοπρ?στυφχψω??????&
&win1253&: &windows1253&,
&cp1253&: &windows1253&,
&windows1254&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&win1254&: &windows1254&,
&cp1254&: &windows1254&,
&windows1255&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+?^‰????? ??????§¨(C)×<> 1/4
3/4 ?????????????????????????????????????????????????????????????????&
&win1255&: &windows1255&,
&cp1255&: &windows1255&,
&windows1256&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ????????????????????????×????????à???????èéê????????????÷?ù??ü???&
&win1256&: &windows1256&,
&cp1256&: &windows1256&,
&windows1257&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+??‰????? ???¤??§?(C)?<> 1/4
3/4 ae???????????????????????×???????ss??ā????ē?é????ī??ń?óō??÷???ūü??˙&
&win1257&: &windows1257&,
&cp1257&: &windows1257&,
&windows1258&: {
&type&: &_sbcs&,
&chars&: &EUR?,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê??í?????ó???÷?ùú?ü???&
&win1258&: &windows1258&,
&cp1258&: &windows1258&,
&iso88591&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&cp28591&: &iso88591&,
&iso88592&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨????-??°??????ˇ,??????????????????????????????×???????ss?á???????é??ěí???ńňó???÷??ú?ü??˙&
&cp28592&: &iso88592&,
&iso88593&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨????-??°????u?·,???? 1/2 ?????????????????????????×???????ssàá??????èéê?ìí????òó???÷?ùú?ü??˙&
&cp28593&: &iso88593&,
&iso88594&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨????-??°??????ˇ,?ē???????????AE????????????????×???????ssāá????ae??é???í?ī??ō????÷??ú?ü?ū˙&
&cp28594&: &iso88594&,
&iso88595&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? Ё???????????-??АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ё???????????§??&
&cp28595&: &iso88595&,
&iso88596&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤????????-??????????????????????????????????????????????????????????????????????????????????&
&cp28596&: &iso88596&,
&iso88597&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ‘’?EUR??§¨(C)?<>? 1/2 ???ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ?ΣΤΥΦΧΨΩ???????αβγδεζηθικλμνξοπρ?στυφχψω??????&
&cp28597&: &iso88597&,
&iso88598&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨(C)×<> 1/4
3/4 ?????????????????????????????????????????????????????????????????&
&cp28598&: &iso88598&,
&iso88599&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&cp28599&: &iso88599&,
&iso885910&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ??????§?????-??°?ē?ī??·?????―ū???????AE????????????????????????ssāá????ae??é???í????ōó??????ú?ü???&
&cp28600&: &iso885910&,
&iso885911&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????&
&cp28601&: &iso885911&,
&iso885913&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ”??¤,,?§?(C)?<> 1/4
3/4 ae???????????????????????×???????ss??ā????ē?é????ī??ń?óō??÷???ūü??’&
&cp28603&: &iso885913&,
&iso885914&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ??????§?(C)???-(R)???????????????????????AE????????????????????????ssàá????ae?èéê?ìí????òó?????ùú?ü???&
&cp28604&: &iso885914&,
&iso885915&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???EUR??§?(C)?<>OEoe????????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&cp28605&: &iso885915&,
&iso885916&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???EUR,,?§?(C)?<>OEoe????????AE????????????????????????ssàá????ae?èéê?ìí???ńòó?????ùú?ü???&
&cp28606&: &iso885916&,
&cp437&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??ì???aeAE??ò?ù????????áíóú??????? 1/2
1/4 ?<>??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm437&: &cp437&,
&csibm437&: &cp437&,
&cp737&: {
&type&: &_sbcs&,
&chars&: &ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσ?τυφχψ??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??ω????????????????±≥≤??÷≈°?·√??■ &
&ibm737&: &cp737&,
&csibm737&: &cp737&,
&cp775&: {
&type&: &_sbcs&,
&chars&: &?üéā?????ē??ī????aeAEō??????????פ??ó???”?(C)(R)? 1/2
1/4 ?<>??▓│┤????╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬????????ū?┘┌█▄▌???ss????uń???????’-±“ 3/4 ?§÷,,°?·???■ &
&ibm775&: &cp775&,
&csibm775&: &cp775&,
&cp850&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??ì???aeAE??ò?ù??????×?áíóú?????(R)? 1/2
1/4 ?<>??▓│┤???(C)╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬¤?????????┘┌█▄????ss????u?????????-±? 3/4 ?§÷,°¨·???■ &
&ibm850&: &cp850&,
&csibm850&: &cp850&,
&cp852&: {
&type&: &_sbcs&,
&chars&: &?üé???????????????????????????×?áíóú??????????<>??▓│┤????╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬¤????????ě┘┌█▄????ss??ńň??????????-??ˇ?§÷,°¨˙???■ &
&ibm852&: &cp852&,
&csibm852&: &cp852&,
&cp855&: {
&type&: &_sbcs&,
&chars&: &????ёЁ??????????????????????юЮъЪаАбБцЦдДеЕфФгГ<>??▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя?ЯрРсСтТуУжЖвВьЬ№-ыЫзЗшШэЭщЩчЧ§■ &
&ibm855&: &cp855&,
&csibm855&: &cp855&,
&cp856&: {
&type&: &_sbcs&,
&chars&: &??????????????????????????????×??????????(R)? 1/2
1/4 ?<>??▓│┤???(C)╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬¤?????????┘┌█▄?????????u?????????-±? 3/4 ?§÷,°¨·???■ &
&ibm856&: &cp856&,
&csibm856&: &cp856&,
&cp857&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??????aeAE??ò?ù????????áíóú?????(R)? 1/2
1/4 ?<>??▓│┤???(C)╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬¤?????????┘┌█▄????ss????u?×???ì???-±? 3/4 ?§÷,°¨·???■ &
&ibm857&: &cp857&,
&csibm857&: &cp857&,
&cp858&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??ì???aeAE??ò?ù??????×?áíóú?????(R)? 1/2
1/4 ?<>??▓│┤???(C)╣║╗╝??┐└┴┬├─┼??╚╔╩╦╠═╬¤?????EUR???┘┌█▄????ss????u?????????-±? 3/4 ?§÷,°¨·???■ &
&ibm858&: &cp858&,
&csibm858&: &cp858&,
&cp860&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??ì???????ò?ù????????áíóú??????? 1/2
1/4 ?<>??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm860&: &cp860&,
&csibm860&: &cp860&,
&cp861&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??????aeAE?????????????áíóú??????? 1/2
1/4 ?<>??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm861&: &cp861&,
&csibm861&: &cp861&,
&cp862&: {
&type&: &_sbcs&,
&chars&: &????????????????????????????????áíóú??????? 1/2
1/4 ?<>??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm862&: &cp862&,
&csibm862&: &cp862&,
&cp863&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è????§???????ù¤?????????óú¨,????? 1/2
3/4 <>??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm863&: &cp863&,
&csibm863&: &cp863&,
&cp864&: {
&type&: &_sbcs&,
&chars&: &\u\u\u\u\b\t\n\u000b\f\r\u000e\u000f\u\u\u\u\u\u001a\u001b\u001c\u001d\u001e\u001f !\&#$?&&#39;()*+,-./:;&=&?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·?√?─│┼┤┬├┴┐┌└┘β∞φ± 1/2
1/4 ≈<>??????? -??¤????????????????????????????????????????????????????????÷×???????????????????????????????■?&
&ibm864&: &cp864&,
&csibm864&: &cp864&,
&cp865&: {
&type&: &_sbcs&,
&chars&: &?üé??à??ê?è??ì???aeAE??ò?ù????????áíóú??????? 1/2
1/4 ?<<¤??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??αssΓπΣσuτΦΘΩδ∞φε∩≡±≥≤??÷≈°?·√??■ &
&ibm865&: &cp865&,
&csibm865&: &cp865&,
&cp866&: {
&type&: &_sbcs&,
&chars&: &АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??рстуфхцчшщъыьэюяЁё??????°?·√№¤■ &
&ibm866&: &cp866&,
&csibm866&: &cp866&,
&cp869&: {
&type&: &_sbcs&,
&chars&: &????????·??‘’?―????????(C)????????????ΑΒΓΔΕΖΗ 1/2 ΘΙ<>??▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε?ζηθικλμνξοπρσ?τ?-±υφχ§ψ?°¨ω???■ &
&ibm869&: &cp869&,
&csibm869&: &cp869&,
&cp922&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§¨(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê?ìí????òó???÷?ùú?ü???&
&ibm922&: &cp922&,
&csibm922&: &cp922&,
&cp1046&: {
&type&: &_sbcs&,
&chars&: &?×÷??????■│─┐┌└┘???????????????? ???¤????????-??????????????????????????????????????????????????????????????????????????????????&
&ibm1046&: &cp1046&,
&csibm1046&: &cp1046&,
&cp1124&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? Ё???????????-??АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ё???????????§??&
&ibm1124&: &cp1124&,
&csibm1124&: &cp1124&,
&cp1125&: {
&type&: &_sbcs&,
&chars&: &АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп??▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌??рстуфхцчшщъыьэюяЁё????????·√№¤■ &
&ibm1125&: &cp1125&,
&csibm1125&: &cp1125&,
&cp1129&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???¤??§oe(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê??í?????ó???÷?ùú?ü???&
&ibm1129&: &cp1129&,
&csibm1129&: &cp1129&,
&cp1133&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???????????????????????????????????????????????????????????????????????????????????????????????&
&ibm1133&: &cp1133&,
&csibm1133&: &cp1133&,
&cp1161&: {
&type&: &_sbcs&,
&chars&: &??????????????????????????????????????????????????????????????????????????????????????????????EUR???????????????????????????????? &
&ibm1161&: &cp1161&,
&csibm1161&: &cp1161&,
&cp1162&: {
&type&: &_sbcs&,
&chars&: &EUR????…???????????‘’“”o–—???????? ???????????????????????????????????????????????????????????????????????????????????????????????&
&ibm1162&: &cp1162&,
&csibm1162&: &cp1162&,
&cp1163&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???EUR??§oe(C)?<> 1/4
3/4 ???????AE????????????????×???????ssàá????ae?èéê??í?????ó???÷?ùú?ü???&
&ibm1163&: &cp1163&,
&csibm1163&: &cp1163&,
&maccroatian&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü+°??§o?ss(R)?(TM)?¨≠??∞±≤≥?u?∑∏?∫??Ohm?????√?≈?<<?… ???OEoe?—“”‘’÷??(C)/¤AE>>–·,,,‰?????????????????^~?π??,?aeˇ&
&maccyrillic&: {
&type&: &_sbcs&,
&chars&: &АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ+°??§o??(R)(C)(TM)??≠??∞±≤≥?u?????????????√?≈?<>… ?????–—“”‘’÷,,????№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤&
&macgreek&: {
&type&: &_sbcs&,
&chars&: &????????à???¨?éèê??(TM)??o 1/2 ‰???-ù?ü+ΓΔΘΛΞΠss(R)(C)Σ?§≠°?Α±≤≥?ΒΕΖΗΙΚΜΦ?ΨΩ?Ν?ΟΡ≈Τ<>… ΥΧ??oe–―“”‘’÷??????????αβψδεφγηιξκλμνοπ?ρστθω?χυζ?????&
&maciceland&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü?°??§o?ss(R)(C)(TM)?¨≠AE?∞±≤≥?u?∑∏π∫??Ohmae????√?≈?<>… ???OEoe–—“”‘’÷???/¤?????·,,,‰?????????????????^~??˙?,??ˇ&
&macroman&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü+°??§o?ss(R)(C)(TM)?¨≠AE?∞±≤≥?u?∑∏π∫??Ohmae????√?≈?<>… ???OEoe–—“”‘’÷???/¤fifl?·,,,‰?????????????????^~??˙?,??ˇ&
&macromania&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü+°??§o?ss(R)(C)(TM)?¨≠??∞±≤≥?u?∑∏π∫??Ohm?????√?≈?<>… ???OEoe–—“”‘’÷???/¤???·,,,‰?????????????????^~??˙?,??ˇ&
&macthai&: {
&type&: &_sbcs&,
&chars&: &<>…??????????“”??o???????????‘’? ??????????????????????????????????????????????????????????–—???????????????(TM)???????????(R)(C)????&
&macturkish&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü+°??§o?ss(R)(C)(TM)?¨≠AE?∞±≤≥?u?∑∏π∫??Ohmae????√?≈?<>… ???OEoe–—“”‘’÷??????????·,,,‰?????????????????^~??˙?,??ˇ&
&macukraine&: {
&type&: &_sbcs&,
&chars&: &АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ+°??§o??(R)(C)(TM)??≠??∞±≤≥?u?????????????√?≈?<>… ?????–—“”‘’÷,,????№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤&
&koi8r&: {
&type&: &_sbcs&,
&chars&: &─│┌┐└┘├┤┬┴┼?▄█▌???▓?■?√≈≤≥ ?°?·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬(C)юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ&
&koi8u&: {
&type&: &_sbcs&,
&chars&: &─│┌┐└┘├┤┬┴┼?▄█▌???▓?■?√≈≤≥ ?°?·÷═║╒ё?╔??╗╘╙╚╛?╝╞╟╠╡Ё?╣??╦╧╨╩╪?╬(C)юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ&
&koi8ru&: {
&type&: &_sbcs&,
&chars&: &─│┌┐└┘├┤┬┴┼?▄█▌???▓?■?√≈≤≥ ?°?·÷═║╒ё?╔??╗╘╙╚╛??╞╟╠╡Ё?╣??╦╧╨╩╪??(C)юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ&
&koi8t&: {
&type&: &_sbcs&,
&chars&: &??,?,,…+??‰????????ё¤??§???<>???(C)юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ&
&armscii8&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ???)(>><<—.?,-?…?????????????????????????????????????????????????????????????????????????????????&
&rk1048&: {
&type&: &_sbcs&,
&chars&: &??,?,,…+?EUR‰????? ???¤??§Ё(C)?<>????АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя&
&type&: &_sbcs&,
&chars&: &\u0000??\u0003???\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010???????\u\u001a\u001b\u001c\u001d\u001e\u001f !\&#$%&&#39;()*+,-./:;&=&?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~???????????????????????????????? ?????????ê??????????à??á???????????????????è???é??????ì?????í?ò???ó???????????ù???ú????????????&
&georgianacademy&: {
&type&: &_sbcs&,
&chars&: &??,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ?????????????????????????????????????????èéê?ìí????òó???÷?ùú?ü???&
&georgianps&: {
&type&: &_sbcs&,
&chars&: &??,?,,…+?^‰?oe??? ???¤??§¨(C)?<> 1/4
3/4 ???????????????????????????????????????ae?èéê?ìí????òó???÷?ùú?ü???&
&pt154&: {
&type&: &_sbcs&,
&chars&: &????,,…???????????‘’“”o–—???????? ??????§Ё(C)?<>????АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя&
&viscii&: {
&type&: &_sbcs&,
&chars&: &\u?\u??\u0007\b\t\n\u000b\f\r\u000e\u000f\u\u?\u\u?\u001a\u001b\u001c\u001d?\u001f !\&#$%&&#39;()*+,-./:;&=&?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????????????????????????????????????????????????????????????????????????????????????àá??????èéê?ìí????òó?????ùú?????&
&iso646cn&: {
&type&: &_sbcs&,
&chars&: &\u\u\u\u\b\t\n\u000b\f\r\u000e\u000f\u\u\u\u\u\u001a\u001b\u001c\u001d\u001e\u001f !\&#?%&&#39;()*+,-./:;&=&?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&
&iso646jp&: {
&type&: &_sbcs&,
&chars&: &\u\u\u\u\b\t\n\u000b\f\r\u000e\u000f\u\u\u\u\u\u001a\u001b\u001c\u001d\u001e\u001f !\&#$%&&#39;()*+,-./:;&=&?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[?]^_`abcdefghijklmnopqrstuvwxyz{|}?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&
&hproman8&: {
&type&: &_sbcs&,
&chars&: &???????????????????????????????? ????????ˋ^¨~??????°??????¤??§???ê??áéóúàèòù???ü???AE?í?ae?ì????ss???????????????????·u? 3/4 — 1/4
1/2 ??<>±?&
&macintosh&: {
&type&: &_sbcs&,
&chars&: &???????áà?????éèê?íì???óò???úù?ü+°??§o?ss(R)(C)(TM)?¨≠AE?∞±≤≥?u?∑∏π∫??Ohmae????√?≈?<>… ???OEoe–—“”‘’÷???/¤fifl?·,,,‰?????????????????^~??˙?,??ˇ&
&ascii&: {
&type&: &_sbcs&,
&chars&: &????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&
&tis620&: {
&type&: &_sbcs&,
&chars&: &????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????&
\ No newline at end of file
Index: tables/cp949.json
===================================================================
--- tables/cp949.json (revision 0)
+++ tables/cp949.json (revision 3)
@@ -0,0 +1,273 @@
+[&0&,&\u],
+[&8141&,&?????&,4,&???????&,6,&????&],
+[&8161&,&?????????&,9,&??&,5,&?&],
+[&8181&,&??????&,18,&??????&,4,&??????????&,6,&??&,5,&????&,6,&?????????????&,7,&??&,7,&???????????&,4,&???????&,4,&????&],
+[&8241&,&???????????&,7,&???&,5],
+[&8261&,&??????&,6,&???&,5,&??????&],
+[&8281&,&?&,7,&??&,7,&???????????&,4,&??????&,10,&?&,5,&?&,17,&?&,7,&??????&,6,&??&,7,&???????&,18],
+[&8341&,&?????&,5,&???&,5,&?&,7],
+[&8361&,&?&,18,&???????&],
+[&8381&,&???????????????&,4,&????????????&,6,&??&,5,&?&,5,&?&,46,&?????&,6,&??&,5,&???&,8],
+[&8441&,&??????&,5,&???????&,8],
+[&8461&,&????????&,18],
+[&8481&,&?&,7,&?????&,6,&???????&,5,&?&,10,&?&,5,&?&,18,&?&,5,&???????&,6,&????&,5,&?&,26,&????&],
+[&8541&,&??&,5,&???&,4,&?&,6,&?&,4],
+[&8561&,&?&,5,&?&,5,&??????&,6,&??&],
+[&8581&,&?&,6,&???????&,6,&?&,9,&?&,26,&???????????????&,29,&??????&,6,&???&,5,&?????&],
+[&8641&,&????????????&,6,&??&,5,&?&],
+[&8661&,&?????&,6,&?????&,10],
+[&8681&,&?&,22,&???????????&,4,&??????&,6,&??&,5,&??????&,6,&???????????&,22,&???????&,4,&?????????????&],
+[&8741&,&?&,9,&?&,15],
+[&8761&,&?&,18,&???????&],
+[&8781&,&?&,5,&??&,7,&??????&,7,&???&,5,&?????&,6,&???&,5,&?&,18,&?&,6,&?&,26,&???????&,6,&?&,4],
+[&8841&,&?&,4,&?&,5,&?&,6,&????&,4],
+[&8861&,&???????&,4,&???????????????&],
+[&8881&,&?&,15,&???????&,4,&???????????????????????&,6,&??&,5,&?&,54,&????????&],
+[&8941&,&????????????&,6,&??&,5,&?&],
+[&8961&,&??????&,10,&?&,5,&????&],
+[&8981&,&?&,21,&??????????????????????&,18,&?&,18,&?&,6,&???????&,6,&??&,7,&?&,15],
+[&8a41&,&?&,10,&??????&,6,&???&],
+[&8a61&,&?&,4,&?&,18,&??&],
+[&8a81&,&?&,4,&?&,19,&?&,5,&???????&,7,&???&,5,&???????&,6,&?????&,5,&??????&,4,&???&,5,&?&,26,&?????&],
+[&8b41&,&?&,5,&??&,4,&??????&,6,&??&],
+[&8b61&,&??????????&,6,&??&,8],
+[&8b81&,&?&,52,&????????????&,4,&??????&,6,&??&,5,&?&,18,&?&,18],
+[&8c41&,&?&,15,&??????&,4],
+[&8c61&,&?&,6,&?&,5,&?&,6,&?&,5],
+[&8c81&,&?&,12,&?&,26,&????&,50,&??????&,5,&?????&,16],
+[&8d41&,&?&,16,&?&,8],
+[&8d61&,&?&,17,&????????&],
+[&8d81&,&?&,4,&????&,33,&?????&,6,&??&,7,&???????&,6,&?&,9,&???????&,6,&???&,5,&??????&,6,&????????&],
+[&8e41&,&??&,6,&??&,5,&???&,8],
+[&8e61&,&?&,4,&??&,19],
+[&8e81&,&?&,13,&??????&,6,&??&,4,&??????&,6,&???&,5,&??????&,6,&??&,5,&????&,11,&??&,7,&??????&,6,&???&,5,&????&,7],
+[&8f41&,&?&,7,&?&,17],
+[&8f61&,&?&,7,&?&,6,&???????&,4],
+[&8f81&,&?????&,5,&???????&,7,&???&,5,&??????&,6,&???&,5,&?&,18,&?&,6,&?&,26,&??????&,6,&????&,5],
+[&9041&,&??????&,6,&???&,5,&??????&],
+[&9061&,&?&,5,&?????&,15],
+[&9081&,&?&,12,&??????&,6,&???&,5,&????&,4,&???????????&,6,&??&,4,&?&,5,&?&,11,&?&,33,&??????????&],
+[&9141&,&?????????????&,6,&??&,5],
+[&9161&,&??????&,9,&??????&,5],
+[&9181&,&?&,20,&??????&,4,&???&,5,&????&,14,&?&,33,&???????&,7,&???&,5,&???????&,6],
+[&9241&,&???&,7,&????&,4,&????????&],
+[&9261&,&?????&,7,&??&,7,&?&,4],
+[&9281&,&?&,21,&???????&,18,&???????&,6,&???&,7,&???????&,6,&???&,35,&?????&],
+[&9341&,&?&,4,&?????????????????????&],
+[&9361&,&???&,6,&?????????&,8],
+[&9381&,&????&,37,&??????&,4,&???&,4,&?????&,6,&??&,5,&??????&,7,&??????????&,22,&?????&],
+[&9441&,&?&,5,&???&,5,&????&,8],
+[&9461&,&?&,5,&?&,6,&?&,12],
+[&9481&,&?&,5,&?&,6,&??????&,6,&?&,9,&????&,22,&?????&,4,&???????&,6,&?&,10,&?&,6,&?&,24],
+[&9541&,&????????&,11,&?&,5,&?&],
+[&9561&,&??????&,6,&????&,5,&?????&],
+[&9581&,&?&,6,&??&,35,&???????&,4,&?????????????&,4,&??&,4,&??????&,6,&??&,5,&?&,13,&?&,14],
+[&9641&,&?&,23,&??&],
+[&9661&,&???&,6,&???&,5,&?&,8],
+[&9681&,&?&,10,&?&,5,&?&,13,&??&,33,&??????&,6,&????&,44],
+[&9741&,&?&,16,&?&,8],
+[&9761&,&?&,17,&?&,7],
+[&9781&,&?&,11,&?&,5,&??????&,6,&????&,89,&???&],
+[&9841&,&?&,16,&?&,5,&???&],
+[&9861&,&????&,6,&?&,15],
+[&9881&,&?&,21,&??????&,6,&???&,5,&????&,4,&????????????&,6,&??&,5,&??????&,6,&???&,5,&???????&,6,&?????&,5,&????????&],
+[&9941&,&???????????&,6,&??&,5,&??&],
+[&9961&,&????&,6,&??&,5,&?????????&],
+[&9981&,&?&,8,&?&,5,&??????&,4,&?????????????&,11,&?&,5,&???????&,6,&???&,6,&???????&,6,&??&,7,&??????&,6,&???&,5,&???????&],
+[&9a41&,&??????????&,16],
+[&9a61&,&???&,6,&??????&,6,&?????&],
+[&9a81&,&?&,4,&??????&,6,&???&,5,&?&,5,&?&,6,&????&,5,&??????&,5,&???&,33,&?????&,5,&????????????&,6,&????&],
+[&9b41&,&?????????&,6,&???&,8],
+[&9b61&,&?&,17,&?&,7],
+[&9b81&,&?&,25,&???????&,4,&???&,5,&???????&,50,&?&,22,&?&],
+[&9c41&,&?????&,4,&????&,5,&???&,5],
+[&9c61&,&?&,8,&?&,6,&?&,9],
+[&9c81&,&?&,8,&?&,6,&???????&,6,&?&,9,&?&,26,&??????&,6,&????&,5,&?&,18,&?&,6,&?&,12],
+[&9d41&,&?&,13,&????&,8],
+[&9d61&,&?&,25],
+[&9d81&,&?&,8,&?&,5,&???????????&,9,&???????&,6,&?&,10,&??????&,6,&???&,5,&??????????????????&,6,&??&,5,&????????????????&],
+[&9e41&,&????????&,7,&?&,9,&?&],
+[&9e61&,&???&,4,&?????????&,6,&????&],
+[&9e81&,&???????????????????????&,6,&??&,6,&?????????????????????&,6,&??&,5,&???&,10,&????&,5,&??????&,6,&???&,5,&??????&,6,&?&],
+[&9f41&,&??&,5,&??????&,4,&???&,5,&?&],
+[&9f61&,&?????&,6,&???&,5,&???????&],
+[&9f81&,&?&,4,&????&,5,&??????&,6,&???&,5,&??????&,6,&?????????????&,4,&??????????&,6,&???&,7,&???????????????????&,4,&??&,4,&????????&],
+[&a041&,&??????&,5,&?????&,6,&????&],
+[&a061&,&?&,5,&???????&,13],
+[&a081&,&?&,4,&???????&,4,&???&,4,&??????&,6,&???&,5,&???????&,6,&???&,5,&?&,26,&???????&,4,&??????&,5,&?&,7,&?????&],
+[&a141&,&????&,18,&????&],
+[&a161&,&?????????&,6,&???&,5,&???&],
+[&a181&,&?&,14,&?&,5,&??????&,4,&? 、。·‥…¨〃-―∥\~‘’“”〔〕〈&,9,&±×÷≠≤≥∞∴°′″℃?¢£¥♂♀∠⊥⌒??≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓〓<>√∽∝∵∫?∈?????∪∩∧∨¬&],
+[&a241&,&??&,5,&?&,18],
+[&a261&,&?&,6,&?&,18],
+[&a281&,&?&,7,&??????&,6,&??&,7,&???=>???~ˇ???˙,???:∮∑∏¤℉‰??????????⊙?????????????????+??↗↙↖↘??????№Co.(TM)a.m.p.m.℡EUR(R)&],
+[&a341&,&????&,6,&?&,10,&?????&],
+[&a361&,&?&,6,&???&,16],
+[&a381&,&?&,16,&??????&,4,&?????!&,58,&?]&,32,& ̄&],
+[&a441&,&????????????&,5,&?????????&],
+[&a461&,&?????&,5,&????&,12],
+[&a481&,&????&,28,&?&,93],
+[&a541&,&?&,4,&??????&,6,&??&,5,&??&],
+[&a561&,&?&,17,&?&,5,&??&],
+[&a581&,&?&,16,&?&,14,&ⅰ&,9],
+[&a5b0&,&Ⅰ&,9],
+[&a5c1&,&Α&,16,&Σ&,6],
+[&a5e1&,&α&,16,&σ&,6],
+[&a641&,&?&,19,&??????&],
+[&a661&,&?&,5,&????????&,5,&?&,6],
+[&a681&,&?????&,6,&?&,18,&??─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃&,7],
+[&a741&,&?&,4,&???????&,6,&?&,7],
+[&a761&,&?&,22,&???&],
+[&a781&,&?????????&,6,&????&,5,&?&,7,&ulml

我要回帖

更多关于 一肩风雨何堪累 的文章

 

随机推荐