mooore tests, jp/cn/ko multibyte encodings
This commit is contained in:
parent
e30594fa9d
commit
ef30efcc27
|
@ -2,3 +2,4 @@ testing.js
|
||||||
ignore
|
ignore
|
||||||
test/data/collation
|
test/data/collation
|
||||||
test/data/conversion
|
test/data/conversion
|
||||||
|
.DS_Store
|
36
README.md
36
README.md
|
@ -1,4 +1,34 @@
|
||||||
chardet
|
|
||||||
=======
|
|
||||||
|
|
||||||
chardet
|
chardet - nodejs characted detection module, written in pure Javascript
|
||||||
|
======
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
npm install chardet
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
var chardet = require('chardet');
|
||||||
|
chardet.detect(new Buffer('hello there!'));
|
||||||
|
// or
|
||||||
|
chardet.detectFile('/path/to/file', function(err, encoding) {});
|
||||||
|
// or
|
||||||
|
chardet.detectFileSync('/path/to/file');
|
||||||
|
|
||||||
|
# Supported Encodings:
|
||||||
|
|
||||||
|
* UTF-8
|
||||||
|
* UTF-16 LE
|
||||||
|
* UTF-16 BE
|
||||||
|
* UTF-32 LE
|
||||||
|
* UTF-32 BE
|
||||||
|
* ISO-2022-JP
|
||||||
|
* ISO-2022-KR
|
||||||
|
* ISO-2022-CN
|
||||||
|
* Shift-JIS
|
||||||
|
* Big5
|
||||||
|
* EUC-JP
|
||||||
|
* EUC-KR
|
||||||
|
* GB18030
|
||||||
|
|
||||||
|
Currently only these encodings are supported, more will be added soon.
|
120
encoding/mbcs.js
120
encoding/mbcs.js
|
@ -194,7 +194,7 @@ mbcs.prototype.nextChar = function(iter, det) {};
|
||||||
*/
|
*/
|
||||||
module.exports.sjis = function() {
|
module.exports.sjis = function() {
|
||||||
this.name = function() {
|
this.name = function() {
|
||||||
return "Shift_JIS";
|
return "Shift-JIS";
|
||||||
};
|
};
|
||||||
this.language = function() {
|
this.language = function() {
|
||||||
return "ja";
|
return "ja";
|
||||||
|
@ -298,71 +298,65 @@ util.inherits(module.exports.big5, mbcs);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EUC charset recognizers. One abstract class that provides the common function
|
* EUC charset recognizers. One abstract class that provides the common function
|
||||||
* for getting the next character according to the EUC encoding scheme,
|
* for getting the next character according to the EUC encoding scheme,
|
||||||
* and nested derived classes for EUC_KR, EUC_JP, EUC_CN.
|
* and nested derived classes for EUC_KR, EUC_JP, EUC_CN.
|
||||||
*
|
*
|
||||||
|
* Get the next character value for EUC based encodings.
|
||||||
|
* Character "value" is simply the raw bytes that make up the character
|
||||||
|
* packed into an int.
|
||||||
*/
|
*/
|
||||||
module.exports.euc = function() {
|
function eucNextChar(iter, det) {
|
||||||
|
it.index = it.nextIndex;
|
||||||
/*
|
iter.error = false;
|
||||||
* Get the next character value for EUC based encodings.
|
var firstByte = 0;
|
||||||
* Character "value" is simply the raw bytes that make up the character
|
var secondByte = 0;
|
||||||
* packed into an int.
|
var thirdByte = 0;
|
||||||
*/
|
//int fourthByte = 0;
|
||||||
this.nextChar = function(iter, det) {
|
buildChar: {
|
||||||
it.index = it.nextIndex;
|
firstByte = iter.charValue = iter.nextByte(det);
|
||||||
iter.error = false;
|
if (firstByte < 0) {
|
||||||
var firstByte = 0;
|
// Ran off the end of the input data
|
||||||
var secondByte = 0;
|
iter.done = true;
|
||||||
var thirdByte = 0;
|
break buildChar;
|
||||||
//int fourthByte = 0;
|
}
|
||||||
buildChar: {
|
if (firstByte <= 0x8d) {
|
||||||
firstByte = iter.charValue = iter.nextByte(det);
|
// single byte char
|
||||||
if (firstByte < 0) {
|
break buildChar;
|
||||||
// Ran off the end of the input data
|
}
|
||||||
iter.done = true;
|
secondByte = iter.nextByte(det);
|
||||||
break buildChar;
|
iter.charValue = (iter.charValue << 8) | secondByte;
|
||||||
|
if (firstByte >= 0xA1 && firstByte <= 0xfe) {
|
||||||
|
// Two byte Char
|
||||||
|
if (secondByte < 0xa1) {
|
||||||
|
iter.error = true;
|
||||||
}
|
}
|
||||||
if (firstByte <= 0x8d) {
|
break buildChar;
|
||||||
// single byte char
|
}
|
||||||
break buildChar;
|
if (firstByte == 0x8e) {
|
||||||
|
// Code Set 2.
|
||||||
|
// In EUC-JP, total char size is 2 bytes, only one byte of actual char value.
|
||||||
|
// In EUC-TW, total char size is 4 bytes, three bytes contribute to char value.
|
||||||
|
// We don't know which we've got.
|
||||||
|
// Treat it like EUC-JP. If the data really was EUC-TW, the following two
|
||||||
|
// bytes will look like a well formed 2 byte char.
|
||||||
|
if (secondByte < 0xa1) {
|
||||||
|
iter.error = true;
|
||||||
}
|
}
|
||||||
secondByte = iter.nextByte(det);
|
break buildChar;
|
||||||
iter.charValue = (iter.charValue << 8) | secondByte;
|
}
|
||||||
if (firstByte >= 0xA1 && firstByte <= 0xfe) {
|
if (firstByte == 0x8f) {
|
||||||
// Two byte Char
|
// Code set 3.
|
||||||
if (secondByte < 0xa1) {
|
// Three byte total char size, two bytes of actual char value.
|
||||||
iter.error = true;
|
thirdByte = iter.nextByte(det);
|
||||||
}
|
iter.charValue = (iter.charValue << 8) | thirdByte;
|
||||||
break buildChar;
|
if (thirdByte < 0xa1) {
|
||||||
}
|
iter.error = true;
|
||||||
if (firstByte == 0x8e) {
|
|
||||||
// Code Set 2.
|
|
||||||
// In EUC-JP, total char size is 2 bytes, only one byte of actual char value.
|
|
||||||
// In EUC-TW, total char size is 4 bytes, three bytes contribute to char value.
|
|
||||||
// We don't know which we've got.
|
|
||||||
// Treat it like EUC-JP. If the data really was EUC-TW, the following two
|
|
||||||
// bytes will look like a well formed 2 byte char.
|
|
||||||
if (secondByte < 0xa1) {
|
|
||||||
iter.error = true;
|
|
||||||
}
|
|
||||||
break buildChar;
|
|
||||||
}
|
|
||||||
if (firstByte == 0x8f) {
|
|
||||||
// Code set 3.
|
|
||||||
// Three byte total char size, two bytes of actual char value.
|
|
||||||
thirdByte = iter.nextByte(det);
|
|
||||||
iter.charValue = (iter.charValue << 8) | thirdByte;
|
|
||||||
if (thirdByte < 0xa1) {
|
|
||||||
iter.error = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (iter.done == false);
|
}
|
||||||
};
|
return (iter.done == false);
|
||||||
};
|
};
|
||||||
util.inherits(module.exports.euc, mbcs);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,8 +387,10 @@ module.exports.euc_jp = function() {
|
||||||
0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee,
|
0xa5e5, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5f3, 0xb8a9, 0xb9d4, 0xbaee,
|
||||||
0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1
|
0xbbc8, 0xbef0, 0xbfb7, 0xc4ea, 0xc6fc, 0xc7bd, 0xcab8, 0xcaf3, 0xcbdc, 0xcdd1
|
||||||
];
|
];
|
||||||
|
|
||||||
|
this.nextChar = eucNextChar;
|
||||||
};
|
};
|
||||||
util.inherits(module.exports.euc_jp, module.exports.euc);
|
util.inherits(module.exports.euc_jp, mbcs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -425,8 +421,10 @@ module.exports.euc_kr = function() {
|
||||||
0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6,
|
0xc0da, 0xc0e5, 0xc0fb, 0xc0fc, 0xc1a4, 0xc1a6, 0xc1b6, 0xc1d6, 0xc1df, 0xc1f6,
|
||||||
0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad
|
0xc1f8, 0xc4a1, 0xc5cd, 0xc6ae, 0xc7cf, 0xc7d1, 0xc7d2, 0xc7d8, 0xc7e5, 0xc8ad
|
||||||
];
|
];
|
||||||
|
|
||||||
|
this.nextChar = eucNextChar;
|
||||||
};
|
};
|
||||||
util.inherits(module.exports.euc_kr, module.exports.euc);
|
util.inherits(module.exports.euc_kr, mbcs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
3
index.js
3
index.js
|
@ -43,8 +43,7 @@ module.exports.detect = function(buffer) {
|
||||||
return a.confidence - b.confidence;
|
return a.confidence - b.confidence;
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(matches);
|
// console.log(matches);
|
||||||
|
|
||||||
return matches.length ? matches.pop().name : null;
|
return matches.length ? matches.pop().name : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"name": "chardet",
|
||||||
|
"version": "0.0.3",
|
||||||
|
"homepage": "https://github.com/runk/node-chardet",
|
||||||
|
"description": "Character detector",
|
||||||
|
"keywords": ["encoding", "character", "utf8", "detector"],
|
||||||
|
"author": "Shirokov Dmitry <deadrunk@gmail.com>",
|
||||||
|
"dependencies": {
|
||||||
|
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type":"git",
|
||||||
|
"url":"git@github.com:runk/node-chardet.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"mail":"deadrunk@gmail.com",
|
||||||
|
"url":"http://github.com/runk/node-chardet/issues"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha -R spec --recursive"
|
||||||
|
},
|
||||||
|
"main": "index.js",
|
||||||
|
"engine": {
|
||||||
|
"node": ">=0.8.0", "npm": "1"
|
||||||
|
},
|
||||||
|
"licences": [{
|
||||||
|
"type":"LGPL2.1",
|
||||||
|
"url": "http://www.gnu.org/licenses/lgpl-2.1.txt"
|
||||||
|
}]
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
var assert = require('assert'),
|
||||||
|
chardet = require('../'),
|
||||||
|
fs = require('fs');
|
||||||
|
|
||||||
|
describe('chardet', function() {
|
||||||
|
|
||||||
|
var path = __dirname + '/data/encodings/utf8';
|
||||||
|
|
||||||
|
describe('#detect', function() {
|
||||||
|
it('should detect encoding', function() {
|
||||||
|
assert.equal(chardet.detect(fs.readFileSync(path)), 'UTF-8');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('#detectFile', function() {
|
||||||
|
it('should detect encoding', function(done) {
|
||||||
|
chardet.detectFile(path, function(err, res) {
|
||||||
|
assert.equal(err, null);
|
||||||
|
assert.equal(res, 'UTF-8');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('#detectFileSync', function() {
|
||||||
|
it('should detect encoding', function() {
|
||||||
|
assert.equal(chardet.detectFileSync(path), 'UTF-8');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,2 +1,2 @@
|
||||||
|
政府資訊科技總監辦公室和平等機會委員會合辦無障礙網頁嘉許計劃,希望透過表彰採用無障礙網頁設計的網站,推動更多企業和機構在其網站採用無障礙網頁設計,讓社會各階層包括殘疾人士更方便地獲取網上資訊和使用網上服務。無障礙網頁嘉許計劃頒獎典禮將於2013年4月15日舉行,為首次舉辦的「國際IT匯」的精彩活動之一。有關詳情,請瀏覽這裡。
|
||||||
欲知更多信息,
|
政府一向致力推動長者在生活上更廣泛應用資訊科技。政府資訊科技總監辦公室已開展一項全港性嘉許計劃「智醒長者嘉許計劃」,表揚在日常生活中積極使用資訊及通訊科技的長者,以鼓勵他們繼續使用資訊及通訊科技。嘉許計劃設有金、銀、銅獎,長者於特定期間完成指定要求,可獲頒贈嘉許證書及獎牌。有關詳情,請瀏覽這裡。
|
|
@ -1,13 +1,10 @@
|
||||||
コンピューターは、本質的には数字しか扱うことができません。コンピューターは、文字や記号などのそれぞれに番号を割り振ることによって扱えるようにします。ユニコードが出来るまでは、これらの番号を割り振る仕組みが何百種類も存在しました。どの一つをとっても、十分な文字を含んではいませんでした。例えば、欧州連合一つを見ても、そのすべての言語をカバーするためには、いくつかの異なる符号化の仕組みが必要でした。英語のような一つの言語に限っても、一つだけの符号化の仕組みでは、一般的に使われるすべての文字、句読点、技術的な記号などを扱うには不十分でした。
|
英語は他の多くのヨーロッパ言語が持っている名詞の格変化や動詞の人称変化のほとんどを失ったため、文中の格関係(誰が誰に何をどうするか)を語順に依存しており、したがって語順が固定的であり「文型」がはっきりしている。
|
||||||
|
日本の英語教育ではC・T・オニオンズの提唱した5文型という考え方が英語の基本文型として広く使われている(実際には、5つの文型ではうまく説明できない文も存在するとし、5文型を強調しすぎることが却って学習の妨げになる、という主張も珍しくない)。
|
||||||
|
5文型は、英文の中心をなす主語述語部分において、前置詞無しに語を並べただけで文ができあがっている物を分類したものと言える。そこで使われている語は主語としての名詞、存在を言う述語としてのbe動詞、作用を言う述語としての一般動詞、主語の性質や状態を言う形容詞、一般動詞の目的語になる名詞、その目的語に対する内容的な述語になる動詞の原形や名詞や形容詞である。このように5文型は主語と動詞と、前置詞無しで並ぶ名詞とその名詞に対して内容的な述語として並ぶ単純な形という限られた部分において、並んだ語の種類によって分類し5つの形にまとめた物と言える。ここには文の大基本である主語と述語に含まれている意味への考察がなされていない。そのため意味に基づいて言葉を使用しようとしている学習者にはかえって妨げとなっているのである。
|
||||||
|
これまでは下記の文型が主要かつ重要なものであるとして扱われてきた。英文の構造の分類法としての5文型は日本以外の国ではあまり一般的ではないが、動詞の語法を説明する上では、「基本5文型」をベースとした動詞型の分類が世界的に受け入れられていて、ジーニアス英和辞典、Oxford Advanced Leaner's Dictionary 等の多くの権威ある辞書において積極的に採用されている。
|
||||||
|
通常、進行形の文は第2文型とは見なさず、動詞部分を三単現など主語に合わせた形にして文型を考える。また完了形も同様である。また受動態の文も5文型に当てはまらない。群動詞を含む文は群動詞全体を1つの動詞と考えることが多い。また、群動詞は助動詞と本動詞が融合したものであるので、特別な形の助動詞として扱えばよい。 そもそも5文型は助動詞を除去した主語と述語の部分において語の並びだけによって分類した物なのである。
|
||||||
|
ランドルフ・クァークは付加語A (Adverbial) を加えた考え方を提唱している。付加語Aは修飾語Mとは異なり省略することができない。この考えでは従来の5文型にSVAとSVOAという文型が加わる。また第2文型のうちVがbe動詞の場合を特別に扱う考えもある(つまりS be C)。また A・S・ホーンビーは第3文型、第4文型、第5文型のOやCが不定詞や分詞や動名詞やthat節の場合などで細かく分類した文型を提唱している。
|
||||||
|
|
||||||
これらの符号化の仕組みは、相互に矛盾するものでもありました。二つの異なる符号化の仕組みが、二つの異なる文字に同一の番号を付けることもできるし、同じ文字に異なる番号を付けることもできるのです。どのようなコンピューターも(特にサーバーは)多くの異なった符号化の仕組みをサポートする必要があります。たとえデータが異なる符号化の仕組みやプラットフォームを通過しても、いつどこでデータが乱れるか分からない危険を冒すことのなるのです。
|
ゲルマン系の単語のほかに、ラテン系の単語も混入しているが、これは、ノルマン・コンクエスト以降、フランスから来た貴族階級がロマンス諸語のオイル語系のノルマン語を話していたことの影響である(時期的には 11世紀以降で、中英語)。英語の名詞に性や格がほぼ消滅して、語尾変化もほかのヨーロッパ語と比べてとても少ないのはこのノルマン・コンクエストによってである。それ以前は複雑であったイギリスの言語が、イギリスの貴族階級や聖職者や教師がノルマン人になり英語を話さなくなった結果、庶民の間で簡単に話せるように簡素化されていった。それとともに貴族階級やジェントリーがフランス語にも近いノルマン語を話し、聖職者がラテン語を話すようになりその結果として多くのラテン語やフランス語も借用されることになった。
|
||||||
ユニコードはすべてを変えます
|
|
||||||
|
|
||||||
ユニコードは、プラットフォームに係わらず、プログラムに係わらず、言語に係わらず、すべての文字に独立した番号を与えます。ユニコード標準は、アップル、ヒューレットパッカード、IBM、ジャストシステム、マイクロソフト、オラクル、SAP、サン、サイベースなどの産業界の主導的企業と他の多くの企業に採用されています。ユニコードは、XML、Java、ECMAScript(JavaScript)、LDAP、CORBA 3.0などの最先端の標準の前提となっており、ユニコードを実装すれば、ISO/IEC 10646に適合することになります。ユニコードは、多くのオペレーティングシステムとすべての最新のブラウザーと他の多くの製品でサポートされています。ユニコード標準の出現とユニコードをサポートするツール類は、昨今顕著になっているソフトウエア技術のグローバル化の流れに対して、特に役に立っています。
|
カナダは元英領植民地であった地域だが、その英領植民地にそれ以前はヌーベルフランスであり、今でもフランス語が使われ続けているケベック州があることから、カナダ全体の公用語として英語とフランス語の両方が制定されており、連邦政府のサイトや企業の商品説明などは全て英仏両言語で行われている。旧英領の国としては、全人口の内、英語を母語とする人の割合は58%と低く、フランス語が22%を占める。これは、移民が非常に多いため第二言語として英語を使用している人口が非常に多いからである。また、アメリカ合衆国が隣に位置していることから、旧英領であるとはいえ、オーストラリアやインドなどほかの旧英領植民地とは違い、比べるとカナダの英語はイギリス英語よりもアメリカ英語に近いが、単語の綴りとしてはイギリス英語式を採用することが多い。ケベック州ではフランス語が公用語であることから、英語を母語とせず英語運用能力が高くない人も少なくないが、ケベック州とニューブランズウィック州、オンタリオ州以外ではほとんどフランス語が使われないこともあり、カナダ英語におけるフランス語の影響は皆無に近い。
|
||||||
|
|
||||||
ユニコードをクライアントサーバー型のアプリケーションや、多層構造を持つアプリケーション、ウェブサイトなどにに組み込むことで、従来の文字コードセットを用いるよりも明らかなコスト削減が可能です。ユニコードは、単一のソフトウエア製品、単一のウェブサイトに、何ら手を加えることなく、複数のプラットフォーム、複数の言語、複数の国をカバーすることが出来るのです。ユニコードは、データが多くの異なるシステムの間を、何の乱れもなしに転送することを可能とするのです。
|
|
||||||
ユニコードコンソーシアムについて
|
|
||||||
|
|
||||||
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
|
|
||||||
|
|
||||||
より詳しいことをお知りになりたい方は、Glossary, Unicode-Enabled Products, Technical Introduction および Useful Resourcesをご参照ください。
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。
|
||||||
|
|
||||||
|
这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。
|
||||||
|
Unicode正在改变所有这一切!
|
||||||
|
|
||||||
|
Unicode给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。Unicode标准已经被这些工业界的领导们所采用,例如:Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys和其它许多公司。最新的标准都需要Unicode,例如XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML等等,并且,Unicode是实现ISO/IEC 10646的正规方式。许多操作系统,所有最新的浏览器和许多其他产品都支持它。Unicode标准的出现和支持它工具的存在,是近来全球软件技术最重要的发展趋势。
|
||||||
|
|
||||||
|
将Unicode与客户服务器或多层应用程序和网站结合,比使用传统字符集节省费用。Unicode使单一软件产品或单一网站能够贯穿多个平台,语言和国家,而不需要重建。它可将数据传输到许多不同的系统,而无损坏。
|
||||||
|
关于Unicode学术学会
|
||||||
|
|
||||||
|
Unicode学术学会是一个非盈利的组织,是为发展,扩展和推广使用Unicode标准而建立的,Unicode学术学会设立了现代软件产品和标准文本的表示法。学术学会的会员代表了广泛领域的计算机和资讯工业的公司和组织。学术学会只由会员提供资金。Unicode学术学会的会员资格开放给世界上任何支持Unicode标准和希望协助其扩展和执行的组织及个人。
|
||||||
|
|
||||||
|
欲知更多信息,请参阅术语词汇表,Unicode产品样本,技术简介和参考资料。
|
|
@ -1,13 +1,2 @@
|
||||||
基本上,计算机只是处理数字。它们指定一个数字,来储存字母或其他字符。在创造Unicode之前,有数百种指定这些数字的编码系统。没有一个编码可以包含足够的字符:例如,单单欧州共同体就需要好几种不同的编码来包括所有的语言。即使是单一种语言,例如英语,也没有哪一个编码可以适用于所有的字母,标点符号,和常用的技术符号。
|
政府資訊科技總監辦公室和平等機會委員會合辦無障礙網頁嘉許計劃,希望透過表彰採用無障礙網頁設計的網站,推動更多企業和機構在其網站採用無障礙網頁設計,讓社會各階層包括殘疾人士更方便地獲取網上資訊和使用網上服務。無障礙網頁嘉許計劃頒獎典禮將於2013年4月15日舉行,為首次舉辦的「國際IT匯」的精彩活動之一。有關詳情,請瀏覽這裡。
|
||||||
|
政府一向致力推動長者在生活上更廣泛應用資訊科技。政府資訊科技總監辦公室已開展一項全港性嘉許計劃「智醒長者嘉許計劃」,表揚在日常生活中積極使用資訊及通訊科技的長者,以鼓勵他們繼續使用資訊及通訊科技。嘉許計劃設有金、銀、銅獎,長者於特定期間完成指定要求,可獲頒贈嘉許證書及獎牌。有關詳情,請瀏覽這裡。
|
||||||
这些编码系统也会互相冲突。也就是说,两种编码可能使用相同的数字代表两个不同的字符,或使用不同的数字代表相同的字符。任何一台特定的计算机(特别是服务器)都需要支持许多不同的编码,但是,不论什么时候数据通过不同的编码或平台之间,那些数据总会有损坏的危险。
|
|
||||||
Unicode正在改变所有这一切!
|
|
||||||
|
|
||||||
Unicode给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。Unicode标准已经被这些工业界的领导们所采用,例如:Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys和其它许多公司。最新的标准都需要Unicode,例如XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML等等,并且,Unicode是实现ISO/IEC 10646的正规方式。许多操作系统,所有最新的浏览器和许多其他产品都支持它。Unicode标准的出现和支持它工具的存在,是近来全球软件技术最重要的发展趋势。
|
|
||||||
|
|
||||||
将Unicode与客户服务器或多层应用程序和网站结合,比使用传统字符集节省费用。Unicode使单一软件产品或单一网站能够贯穿多个平台,语言和国家,而不需要重建。它可将数据传输到许多不同的系统,而无损坏。
|
|
||||||
关于Unicode学术学会
|
|
||||||
|
|
||||||
Unicode学术学会是一个非盈利的组织,是为发展,扩展和推广使用Unicode标准而建立的,Unicode学术学会设立了现代软件产品和标准文本的表示法。学术学会的会员代表了广泛领域的计算机和资讯工业的公司和组织。学术学会只由会员提供资金。Unicode学术学会的会员资格开放给世界上任何支持Unicode标准和希望协助其扩展和执行的组织及个人。
|
|
||||||
|
|
||||||
欲知更多信息,请参阅术语词汇表,Unicode产品样本,技术简介和参考资料。
|
|
|
@ -9,5 +9,3 @@
|
||||||
ユニコードコンソーシアムについて
|
ユニコードコンソーシアムについて
|
||||||
|
|
||||||
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
|
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
|
||||||
|
|
||||||
より詳しいことをお知りになりたい方は、Glossary, Unicode-Enabled Products, Technical Introduction および Useful Resourcesをご参照ください。
|
|
||||||
|
|
|
@ -1,25 +1,28 @@
|
||||||
|
|
||||||
var assert = require('assert'),
|
var assert = require('assert'),
|
||||||
chardet = require('../');
|
chardet = require('../../');
|
||||||
|
|
||||||
|
describe('ISO-2022', function() {
|
||||||
|
|
||||||
|
var base = __dirname + '/../data/encodings';
|
||||||
|
|
||||||
describe('iso2022', function() {
|
|
||||||
it('should return ISO-2022-JP', function() {
|
it('should return ISO-2022-JP', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/iso2022jp'),
|
chardet.detectFileSync(base + '/iso2022jp'),
|
||||||
'ISO-2022-JP'
|
'ISO-2022-JP'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return ISO-2022-KR', function() {
|
it('should return ISO-2022-KR', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/iso2022kr'),
|
chardet.detectFileSync(base + '/iso2022kr'),
|
||||||
'ISO-2022-KR'
|
'ISO-2022-KR'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return ISO-2022-CN', function() {
|
it('should return ISO-2022-CN', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/iso2022cn'),
|
chardet.detectFileSync(base + '/iso2022cn'),
|
||||||
'ISO-2022-CN'
|
'ISO-2022-CN'
|
||||||
);
|
);
|
||||||
});
|
});
|
|
@ -0,0 +1,44 @@
|
||||||
|
|
||||||
|
var assert = require('assert'),
|
||||||
|
chardet = require('../../');
|
||||||
|
|
||||||
|
describe('Multybyte Character Sets', function() {
|
||||||
|
|
||||||
|
var base = __dirname + '/../data/encodings';
|
||||||
|
|
||||||
|
it('should return SHIFT-JIS', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(base + '/shiftjis'),
|
||||||
|
'Shift-JIS'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return GB18030', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(base + '/gb18030'),
|
||||||
|
'GB18030'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return Big5', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(base + '/big5'),
|
||||||
|
'Big5'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return EUC-JP', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(base + '/euc_jp'),
|
||||||
|
'EUC-JP'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return EUC-KR', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(base + '/euc_kr'),
|
||||||
|
'EUC-KR'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
|
@ -1,32 +1,35 @@
|
||||||
|
|
||||||
var assert = require('assert'),
|
var assert = require('assert'),
|
||||||
chardet = require('../');
|
chardet = require('../../');
|
||||||
|
|
||||||
|
describe('Unicode', function() {
|
||||||
|
|
||||||
|
var base = __dirname + '/../data/encodings';
|
||||||
|
|
||||||
describe('unicode', function() {
|
|
||||||
it('should return UTF-16LE', function() {
|
it('should return UTF-16LE', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/utf16le'),
|
chardet.detectFileSync(base + '/utf16le'),
|
||||||
'UTF-16LE'
|
'UTF-16LE'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return UTF-16BE', function() {
|
it('should return UTF-16BE', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/utf16be'),
|
chardet.detectFileSync(base + '/utf16be'),
|
||||||
'UTF-16BE'
|
'UTF-16BE'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return UTF-32LE', function() {
|
it('should return UTF-32LE', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/utf32le'),
|
chardet.detectFileSync(base + '/utf32le'),
|
||||||
'UTF-32LE'
|
'UTF-32LE'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return UTF-32BE', function() {
|
it('should return UTF-32BE', function() {
|
||||||
assert.equal(
|
assert.equal(
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/utf32be'),
|
chardet.detectFileSync(base + '/utf32be'),
|
||||||
'UTF-32BE'
|
'UTF-32BE'
|
||||||
);
|
);
|
||||||
});
|
});
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
var assert = require('assert'),
|
||||||
|
chardet = require('../../');
|
||||||
|
|
||||||
|
describe('UTF-8', function() {
|
||||||
|
it('should return UTF-8', function() {
|
||||||
|
assert.equal(
|
||||||
|
chardet.detectFileSync(__dirname + '/../data/encodings/utf8'),
|
||||||
|
'UTF-8'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
30
test/mbcs.js
30
test/mbcs.js
|
@ -1,30 +0,0 @@
|
||||||
|
|
||||||
var assert = require('assert'),
|
|
||||||
chardet = require('../');
|
|
||||||
|
|
||||||
describe('Multy byte character sets', function() {
|
|
||||||
it('should return SHIFT_JIS', function() {
|
|
||||||
assert.equal(
|
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/shiftjis'),
|
|
||||||
'Shift_JIS'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return BIG-5');
|
|
||||||
|
|
||||||
it('should return EUC-JP', function() {
|
|
||||||
assert.equal(
|
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/euc_jp'),
|
|
||||||
'EUC-JP'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return EUC-KR', function() {
|
|
||||||
assert.equal(
|
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/euc_kr'),
|
|
||||||
'EUC-KR'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
12
test/utf8.js
12
test/utf8.js
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
var assert = require('assert'),
|
|
||||||
chardet = require('../');
|
|
||||||
|
|
||||||
describe('utf8', function() {
|
|
||||||
it('should return UTF-8', function() {
|
|
||||||
assert.equal(
|
|
||||||
chardet.detectFileSync(__dirname + '/data/encodings/utf8'),
|
|
||||||
'UTF-8'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
Reference in New Issue