basic tests, improvements

This commit is contained in:
Dmitry Shirokov 2013-04-30 00:31:48 +10:00
parent dcaa9ba5d7
commit e30594fa9d
25 changed files with 265 additions and 12 deletions

4
.gitignore vendored
View File

@ -1,2 +1,4 @@
testing.js testing.js
java ignore
test/data/collation
test/data/conversion

View File

@ -119,7 +119,7 @@ mbcs.prototype.match = function(det) {
} }
} }
if (badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount) { if (badCharCount >= 2 && badCharCount*5 >= doubleByteCharCount) {
console.log(1) // console.log('its here!')
// Bail out early if the byte data is not matching the encoding scheme. // Bail out early if the byte data is not matching the encoding scheme.
break detectBlock; break detectBlock;
} }

View File

@ -93,7 +93,7 @@ UTF_32.prototype.match = function(det) {
module.exports.UTF_32BE = function() { module.exports.UTF_32BE = function() {
this.name = function() { this.name = function() {
return "UTF_32BE"; return "UTF-32BE";
}; };
this.getChar = function(input, index) { this.getChar = function(input, index) {
return (input[index + 0] & 0xFF) << 24 | (input[index + 1] & 0xFF) << 16 | return (input[index + 0] & 0xFF) << 24 | (input[index + 1] & 0xFF) << 16 |
@ -104,7 +104,7 @@ util.inherits(module.exports.UTF_32BE, UTF_32);
module.exports.UTF_32LE = function() { module.exports.UTF_32LE = function() {
this.name = function() { this.name = function() {
return "UTF_32LE"; return "UTF-32LE";
}; };
this.getChar = function(input, index) { this.getChar = function(input, index) {
return (input[index + 3] & 0xFF) << 24 | (input[index + 2] & 0xFF) << 16 | return (input[index + 3] & 0xFF) << 24 | (input[index + 2] & 0xFF) << 16 |

View File

@ -1,10 +1,13 @@
var fs = require('fs');
var UTF_8 = require('./encoding/utf8'); var UTF_8 = require('./encoding/utf8');
var unicode = require('./encoding/unicode'); var unicode = require('./encoding/unicode');
var mbcs = require('./encoding/mbcs'); var mbcs = require('./encoding/mbcs');
var iso2022 = require('./encoding/iso2022'); var iso2022 = require('./encoding/iso2022');
var self = this;
var recognisers = [ var recognisers = [
new UTF_8, new UTF_8,
new unicode.UTF_16BE, new unicode.UTF_16BE,
@ -23,22 +26,36 @@ var recognisers = [
module.exports.detect = function(buffer) { module.exports.detect = function(buffer) {
var det = { var context = {
fRawInput: buffer, fRawInput: buffer,
fRawLength: buffer.length, fRawLength: buffer.length,
fInputBytes: buffer, fInputBytes: buffer,
fInputLen: buffer.length fInputLen: buffer.length
}; };
var matches = []; var matches = recognisers.map(function(rec) {
for (var i = recognisers.length - 1; i >= 0; i--) { return rec.match(context);
var recogniser = recognisers[i]; }).filter(function(match) {
matches.push(rec.match(det)); return !!match;
}; });
matches.sort(function(a, b) { matches.sort(function(a, b) {
return a.confidence - b.confidence; return a.confidence - b.confidence;
}); });
return matches.pop().name; console.log(matches);
return matches.length ? matches.pop().name : null;
};
module.exports.detectFile = function(filepath, fn) {
fs.readFile(filepath, function(err, res) {
if (err)
return fn(err, null);
fn(null, self.detect(res));
});
};
module.exports.detectFileSync = function(filepath) {
return self.detect(fs.readFileSync(filepath));
}; };

View File

@ -3,5 +3,5 @@ module.exports = function(det, rec, confidence, name, lang) {
// console.log(det, rec, confidence); // console.log(det, rec, confidence);
// this.res = 1; // this.res = 1;
this.confidence = confidence; this.confidence = confidence;
this.name = name || rec.getName(); this.name = name || rec.name();
} }

BIN
test/data/collation.zip Normal file

Binary file not shown.

2
test/data/encodings/big5 Normal file
View File

@ -0,0 +1,2 @@
欲知更多信息,

View File

@ -0,0 +1,13 @@
コンピューターは、本質的には数字しか扱うことができません。コンピューターは、文字や記号などのそれぞれに番号を割り振ることによって扱えるようにします。ユニコードが出来るまでは、これらの番号を割り振る仕組みが何百種類も存在しました。どの一つをとっても、十分な文字を含んではいませんでした。例えば、欧州連合一つを見ても、そのすべての言語をカバーするためには、いくつかの異なる符号化の仕組みが必要でした。英語のような一つの言語に限っても、一つだけの符号化の仕組みでは、一般的に使われるすべての文字、句読点、技術的な記号などを扱うには不十分でした。
これらの符号化の仕組みは、相互に矛盾するものでもありました。二つの異なる符号化の仕組みが、二つの異なる文字に同一の番号を付けることもできるし、同じ文字に異なる番号を付けることもできるのです。どのようなコンピューターも(特にサーバーは)多くの異なった符号化の仕組みをサポートする必要があります。たとえデータが異なる符号化の仕組みやプラットフォームを通過しても、いつどこでデータが乱れるか分からない危険を冒すことのなるのです。
ユニコードはすべてを変えます
ユニコードは、プラットフォームに係わらず、プログラムに係わらず、言語に係わらず、すべての文字に独立した番号を与えます。ユニコード標準は、アップル、ヒューレットパッカード、IBM、ジャストシステム、マイクロソフト、オラクル、SAP、サン、サイベースなどの産業界の主導的企業と他の多くの企業に採用されています。ユニコードは、XML、Java、ECMAScript(JavaScript)、LDAP、CORBA 3.0などの最先端の標準の前提となっており、ユニコードを実装すれば、ISO/IEC 10646に適合することになります。ユニコードは、多くのオペレーティングシステムとすべての最新のブラウザーと他の多くの製品でサポートされています。ユニコード標準の出現とユニコードをサポートするツール類は、昨今顕著になっているソフトウエア技術のグローバル化の流れに対して、特に役に立っています。
ユニコードをクライアントサーバー型のアプリケーションや、多層構造を持つアプリケーション、ウェブサイトなどにに組み込むことで、従来の文字コードセットを用いるよりも明らかなコスト削減が可能です。ユニコードは、単一のソフトウエア製品、単一のウェブサイトに、何ら手を加えることなく、複数のプラットフォーム、複数の言語、複数の国をカバーすることが出来るのです。ユニコードは、データが多くの異なるシステムの間を、何の乱れもなしに転送することを可能とするのです。
ユニコードコンソーシアムについて
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
より詳しいことをお知りになりたい方は、Glossary, Unicode-Enabled Products, Technical Introduction および Useful Resourcesをご参照ください。

View File

@ -0,0 +1,13 @@
기본적으로 컴퓨터는 숫자만 처리합니다. 글자나 다른 문자에도 숫자를 지정하여 저장합니다. 유니코드가 개발되기 전에는 이러한 숫자를 지정하기 위해 수백 가지의 다른 기호화 시스템을 사용했습니다. 단일 기호화 방법으로는 모든 문자를 포함할 수 없었습니다. 예를 들어 유럽 연합에서만 보더라도 모든 각 나라별 언어를 처리하려면 여러 개의 다른 기호화 방법이 필요합니다. 영어와 같은 단일 언어의 경우도 공통적으로 사용되는 모든 글자, 문장 부호 및 테크니컬 기호에 맞는 단일 기호화 방법을 갖고 있지 못하였습니다.
이러한 기호화 시스템은 또한 다른 기호화 시스템과 충돌합니다. 즉 두 가지 기호화 방법이 두 개의 다른 문자에 대해 같은 번호를 사용하거나 같은 문자에 대해 다른 번호를 사용할 수 있습니다. 주어진 모든 컴퓨터(특히 서버)는 서로 다른 여러 가지 기호화 방법을 지원해야 합니다. 그러나, 데이터를 서로 다른 기호화 방법이나 플랫폼 간에 전달할 때마다 그 데이터는 항상 손상의 위험을 겪게 됩니다.
유니코드로 모든 것을 해결할 수 있습니다!
유니코드는 사용 중인 플랫폼, 프로그램, 언어에 관계없이 문자마다 고유한 숫자를 제공합니다. 유니코드 표준은 Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 및 기타 여러 회사와 같은 업계 선두주자에 의해 채택되었습니다. 유니코드는 XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 등과 같이 현재 널리 사용되는 표준에서 필요하며 이는 ISO/IEC 10646을 구현하는 공식적인 방법입니다. 이는 많은 운영 체제, 요즘 사용되는 모든 브라우저 및 기타 많은 제품에서 지원됩니다. 유니코드 표준의 부상과 이를 지원하는 도구의 가용성은 최근 전 세계에 불고 있는 기술 경향에서 가장 중요한 부분을 차지하고 있습니다.
유니코드를 클라이언트-서버 또는 다중-연결 응용 프로그램과 웹 사이트에 통합하면 레거시 문자 세트 사용에 있어서 상당한 비용 절감 효과가 나타납니다. 유니코드를 통해 리엔지니어링 없이 다중 플랫폼, 언어 및 국가 간에 단일 소프트웨어 플랫폼 또는 단일 웹 사이트를 목표로 삼을 수 있습니다. 이를 사용하면 데이터를 손상 없이 여러 시스템을 통해 전송할 수 있습니다.
유니코드 콘소시엄에 대해
유니코드 콘소시엄은 비영리 조직으로서 현대 소프트웨어 제품과 표준에서 텍스트의 표현을 지정하는 유니코드 표준의 사용을 개발하고 확장하며 장려하기 위해 세워졌습니다. 콘소시엄 멤버쉽은 컴퓨터와 정보 처리 산업에 종사하고 있는 광범위한 회사 및 조직의 범위를 나타냅니다. 콘소시엄의 재정은 전적으로 회비에 의해 충당됩니다. 유니코드 컨소시엄에서의 멤버쉽은 전 세계 어느 곳에서나 유니코드 표준을 지원하고 그 확장과 구현을 지원하고자하는 조직과 개인에게 개방되어 있습니다.
더 자세한 내용은 용어집, 예제 유니코드 사용 가능 제품, 기술 정보 및 기타 유용한 정보를 참조하십시오.

View File

@ -0,0 +1,13 @@
$)A;y1>IO#,<FKc;zV;JG4&@mJ}WV!#K|CGV86(R;8vJ}WV#,@44"4fWVD8;rFdK{WV7{!#TZ44TlUnicodeV.G0#,SPJ}0YVVV86(UbP)J}WV5D1`BkO5M3!#C;SPR;8v1`Bk?IRT0|:,Wc9;5DWV7{#:@}Hg#,5%5%E7V]92M,Le>MPhR*:C<8VV2;M,5D1`Bk@40|@(KySP5DSoQT!#<4J9JG5%R;VVSoQT#,@}HgS"So#,R2C;SPDDR;8v1`Bk?IRTJJSCSZKySP5DWVD8#,1j5c7{:E#,:M3#SC5D<<Ju7{:E!#
$)AUbP)1`BkO5M3R2;a;%O`3eM;!#R2>MJGK5#,A=VV1`Bk?ID\J9SCO`M,5DJ}WV4z1mA=8v2;M,5DWV7{#,;rJ9SC2;M,5DJ}WV4z1mO`M,5DWV7{!#HN:NR;L(LX6(5D<FKc;z(LX1pJG7~NqFw)6<PhR*V'3VPm6`2;M,5D1`Bk#,5+JG#,2;B[J2C4J1:rJ}>]M(9}2;M,5D1`Bk;rF=L(V.<d#,DGP)J}>]W\;aSPKp;55DN#OU!#
Unicode$)AU}TZ8D1dKySPUbR;GP#!
Unicode$)A8xC?8vWV7{La9)AKR;8vN(R;5DJ}WV#,2;B[JGJ2C4F=L(#,2;B[JGJ2C43LPr#,2;B[J2C4SoQT!#Unicode1jW<RQ>-1;UbP)9$R5=g5DAl5<CGKy2ISC#,@}Hg#:Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys:MFdK|Pm6`9+K>!#WnPB5D1jW<6<PhR*Unicode#,@}HgXML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML5H5H#,2"GR#,UnicodeJGJ5OVISO/IEC 106465DU}9f7=J=!#Pm6`2YWwO5M3#,KySPWnPB5Dd/@@Fw:MPm6`FdK{2zF76<V'3VK|!#Unicode1jW<5D3vOV:MV'3VK|9$>_5D4fTZ#,JG=|@4H+GrHm<~<<JuWnVXR*5D7"U9GwJF!#
$)A=+UnicodeSk?M;'7~NqFw;r6`2cS&SC3LPr:MMxU>=a:O#,1HJ9SC4+M3WV7{</=ZJ!7QSC!#UnicodeJ95%R;Hm<~2zF7;r5%R;MxU>D\9;9a4)6`8vF=L(#,SoQT:M9z<R#,6x2;PhR*VX=(!#K|?I=+J}>]4+Jd5=Pm6`2;M,5DO5M3#,6xN^Kp;5!#
$)A9XSZUnicodeQ'JuQ';a
Unicode$)AQ'JuQ';aJGR;8v7GS/@{5DWiV/#,JGN*7"U9#,@)U9:MMF9cJ9SCUnicode1jW<6x=(A"5D#,UnicodeQ'JuQ';aIhA"AKOV4zHm<~2zF7:M1jW<ND1>5D1mJ>7(!#Q'JuQ';a5D;aT14z1mAK9c7:AlSr5D<FKc;z:MWJQ69$R55D9+K>:MWiV/!#Q'JuQ';aV;SI;aT1La9)WJ=p!#UnicodeQ'JuQ';a5D;aT1WJ8q?*7E8xJ@=gIOHN:NV'3VUnicode1jW<:MO#M{P-VzFd@)U9:MV4PP5DWiV/<08vHK!#
$)AS{V*8|6`PEO"#,Gk2NTDJuSo4J;c1m#,Unicode2zF7Qy1>#,<<Ju<r=i:M2N?<WJAO!#

View File

@ -0,0 +1,13 @@
$B%3%s%T%e!<%?!<$O!"K\<AE*$K$O?t;z$7$+07$&$3$H$,$G$-$^$;$s!#%3%s%T%e!<%?!<$O!"J8;z$d5-9f$J$I$N$=$l$>$l$KHV9f$r3d$j?6$k$3$H$K$h$C$F07$($k$h$&$K$7$^$9!#%f%K%3!<%I$,=PMh$k$^$G$O!"$3$l$i$NHV9f$r3d$j?6$k;EAH$_$,2?I4<oN`$bB8:_$7$^$7$?!#$I$N0l$D$r$H$C$F$b!"==J,$JJ8;z$r4^$s$G$O$$$^$;$s$G$7$?!#Nc$($P!"2$=#O"9g0l$D$r8+$F$b!"$=$N$9$Y$F$N8@8l$r%+%P!<$9$k$?$a$K$O!"$$$/$D$+$N0[$J$kId9f2=$N;EAH$_$,I,MW$G$7$?!#1Q8l$N$h$&$J0l$D$N8@8l$K8B$C$F$b!"0l$D$@$1$NId9f2=$N;EAH$_$G$O!"0lHLE*$K;H$o$l$k$9$Y$F$NJ8;z!"6gFIE@!"5;=QE*$J5-9f$J$I$r07$&$K$OIT==J,$G$7$?!#(B
$B$3$l$i$NId9f2=$N;EAH$_$O!"Aj8_$KL7=b$9$k$b$N$G$b$"$j$^$7$?!#Fs$D$N0[$J$kId9f2=$N;EAH$_$,!"Fs$D$N0[$J$kJ8;z$KF10l$NHV9f$rIU$1$k$3$H$b$G$-$k$7!"F1$8J8;z$K0[$J$kHV9f$rIU$1$k$3$H$b$G$-$k$N$G$9!#$I$N$h$&$J%3%s%T%e!<%?!<$b!JFC$K%5!<%P!<$O!KB?$/$N0[$J$C$?Id9f2=$N;EAH$_$r%5%]!<%H$9$kI,MW$,$"$j$^$9!#$?$H$(%G!<%?$,0[$J$kId9f2=$N;EAH$_$d%W%i%C%H%U%)!<%`$rDL2a$7$F$b!"$$$D$I$3$G%G!<%?$,Mp$l$k$+J,$+$i$J$$4m81$rKA$9$3$H$N$J$k$N$G$9!#(B
$B%f%K%3!<%I$O$9$Y$F$rJQ$($^$9(B
$B%f%K%3!<%I$O!"%W%i%C%H%U%)!<%`$K78$o$i$:!"%W%m%0%i%`$K78$o$i$:!"8@8l$K78$o$i$:!"$9$Y$F$NJ8;z$KFHN)$7$?HV9f$rM?$($^$9!#%f%K%3!<%II8=`$O!"%"%C%W%k!"%R%e!<%l%C%H%Q%C%+!<%I!"(BIBM$B!"%8%c%9%H%7%9%F%`!"%^%$%/%m%=%U%H!"%*%i%/%k!"(BSAP$B!"%5%s!"%5%$%Y!<%9$J$I$N;:6H3&$N<gF3E*4k6H$HB>$NB?$/$N4k6H$K:NMQ$5$l$F$$$^$9!#%f%K%3!<%I$O!"(BXML$B!"(BJava$B!"(BECMAScript(JavaScript)$B!"(BLDAP$B!"(BCORBA 3.0$B$J$I$N:G@hC<$NI8=`$NA0Ds$H$J$C$F$*$j!"%f%K%3!<%I$r<BAu$9$l$P!"(BISO/IEC 10646$B$KE,9g$9$k$3$H$K$J$j$^$9!#%f%K%3!<%I$O!"B?$/$N%*%Z%l!<%F%#%s%0%7%9%F%`$H$9$Y$F$N:G?7$N%V%i%&%6!<$HB>$NB?$/$N@=IJ$G%5%]!<%H$5$l$F$$$^$9!#%f%K%3!<%II8=`$N=P8=$H%f%K%3!<%I$r%5%]!<%H$9$k%D!<%kN`$O!":r:#82Cx$K$J$C$F$$$k%=%U%H%&%(%"5;=Q$N%0%m!<%P%k2=$NN.$l$KBP$7$F!"FC$KLr$KN)$C$F$$$^$9!#(B
$B%f%K%3!<%I$r%/%i%$%"%s%H%5!<%P!<7?$N%"%W%j%1!<%7%g%s$d!"B?AX9=B$$r;}$D%"%W%j%1!<%7%g%s!"%&%'%V%5%$%H$J$I$K$KAH$_9~$`$3$H$G!"=>Mh$NJ8;z%3!<%I%;%C%H$rMQ$$$k$h$j$bL@$i$+$J%3%9%H:o8:$,2DG=$G$9!#%f%K%3!<%I$O!"C10l$N%=%U%H%&%(%"@=IJ!"C10l$N%&%'%V%5%$%H$K!"2?$i<j$r2C$($k$3$H$J$/!"J#?t$N%W%i%C%H%U%)!<%`!"J#?t$N8@8l!"J#?t$N9q$r%+%P!<$9$k$3$H$,=PMh$k$N$G$9!#%f%K%3!<%I$O!"%G!<%?$,B?$/$N0[$J$k%7%9%F%`$N4V$r!"2?$NMp$l$b$J$7$KE>Aw$9$k$3$H$r2DG=$H$9$k$N$G$9!#(B
$B%f%K%3!<%I%3%s%=!<%7%"%`$K$D$$$F(B
$B%f%K%3!<%I%3%s%=!<%7%"%`$O!":G?7$N%=%U%H%&%(%"@=IJ$HI8=`$K$*$$$F%F%-%9%H$rI=8=$9$k$3$H$r0UL#$9$k!H%f%K%3!<%II8=`!I$N9=C[!"H/E8!"Ia5Z!"MxMQB%?J$rL\E*$H$7$F@_N)$5$l$?Hs1DMxAH?%$G$9!#F1%3%s%=!<%7%"%`$N2q0w$O!"%3%s%T%e!<%?!<$H>pJs=hM}$K78$o$k9-HF$J4k6H$dAH?%$+$i9=@.$5$l$F$$$^$9!#F1%3%s%=!<%7%"%`$O!":b@/E*$K$O!"=c?h$K2qHq$N$_$K$h$C$F1?1D$5$l$F$$$^$9!#%f%K%3!<%II8=`$r;Y;}$7!"$=$N3HD%$H<BAu$r;Y1g$9$k@$3&Cf$NAH?%$d8D?M$O!"$@$l$b$,%f%K%3!<%I%3%s%=!<%7%"%`$N2q0w$J$k$3$H$,$G$-$^$9!#(B
$B$h$j>\$7$$$3$H$r$*CN$j$K$J$j$?$$J}$O!"(BGlossary, Unicode-Enabled Products, Technical Introduction $B$*$h$S(B Useful Resources$B$r$4;2>H$/$@$5$$!#(B

View File

@ -0,0 +1,13 @@
$)C1b:;@{@87N DDG;EM4B <}@Z88 C38.GU4O4Y. 1[@Z3* 4Y8% 9.@Z?!55 <}@Z8& AvA$GO?) @z@eGU4O4Y. @/4ODZ5e0! 039_5G1b @|?!4B @L7/GQ <}@Z8& AvA$GO1b @'GX <v9i 0!Av@G 4Y8% 1bH#H- =C=:E[@; ;g?kG_=@4O4Y. 4\@O 1bH#H- 9f9}@87N4B 8p5g 9.@Z8& FwGTGR <v >x>z=@4O4Y. ?98& 5i>n @/74 ?,GU?!<-88 :84u6s55 8p5g 0" 3*6s:0 >p>n8& C38.GO7A8i ?)7/ 03@G 4Y8% 1bH#H- 9f9}@L GJ?dGU4O4Y. ?5>n?M 00@: 4\@O >p>n@G 0f?l55 0xEk@{@87N ;g?k5G4B 8p5g 1[@Z, 9.@e :NH# 9W EWE)4ODC 1bH#?! 8B4B 4\@O 1bH#H- 9f9}@; 0.0m @VAv 8xGO?4=@4O4Y.
$)C@L7/GQ 1bH#H- =C=:E[@: 6GGQ 4Y8% 1bH#H- =C=:E[0z Cf59GU4O4Y. Ao 5N 0!Av 1bH#H- 9f9}@L 5N 03@G 4Y8% 9.@Z?! 4kGX 00@: 9xH#8& ;g?kGO0E3* 00@: 9.@Z?! 4kGX 4Y8% 9xH#8& ;g?kGR <v @V=@4O4Y. AV>nAx 8p5g DDG;EM(F/Hw <-9v)4B <-7N 4Y8% ?)7/ 0!Av 1bH#H- 9f9}@; Av?xGX>_ GU4O4Y. 1W7/3*, 5%@LEM8& <-7N 4Y8% 1bH#H- 9f9}@L3* GC7'F{ 0#?! @|4^GR 6'864Y 1W 5%@LEM4B GW;s <U;s@G @'Gh@; 0^0T 5K4O4Y.
$)C@/4ODZ5e7N 8p5g 0M@; GX0aGR <v @V=@4O4Y!
$)C@/4ODZ5e4B ;g?k A_@N GC7'F{, GA7N1W7%, >p>n?! 0|0h>x@L 9.@Z864Y 0m@/GQ <}@Z8& A&0xGU4O4Y. @/4ODZ5e G%AX@: Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 9W 1bE8 ?)7/ H8;g?M 00@: >w0h <15NAV@Z?! @GGX C$EC5G>z=@4O4Y. @/4ODZ5e4B XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 5n0z 00@L Gv@g 3N8. ;g?k5G4B G%AX?!<- GJ?dGO8g @L4B ISO/IEC 10646@; 18GvGO4B 0x=D@{@N 9f9}@T4O4Y. @L4B 89@: ?n?5 C<A&, ?dAr ;g?k5G4B 8p5g :j6s?l@z 9W 1bE8 89@: A&G0?!<- Av?x5K4O4Y. @/4ODZ5e G%AX@G :N;s0z @L8& Av?xGO4B 5518@G 0!?k<:@: CV1Y @| <<0h?! :R0m @V4B 1b<z 0fGb?!<- 0!@e A_?dGQ :N:P@; BwAvGO0m @V=@4O4Y.
$)C@/4ODZ5e8& E,6s@L>pF.-<-9v 6G4B 4YA_-?,0a @@?k GA7N1W7%0z @% ;g@LF.?! EkGUGO8i 790E=C 9.@Z <<F. ;g?k?! @V>n<- ;s4gGQ :q?k @}0( H?0z0! 3*E8334O4Y. @/4ODZ5e8& EkGX 8.?#Av4O>n85 >x@L 4YA_ GC7'F{, >p>n 9W 190! 0#?! 4\@O <RGAF.?~>n GC7'F{ 6G4B 4\@O @% ;g@LF.8& 8qG%7N ;o@; <v @V=@4O4Y. @L8& ;g?kGO8i 5%@LEM8& <U;s >x@L ?)7/ =C=:E[@; EkGX @|<[GR <v @V=@4O4Y.
$)C@/4ODZ5e D\<R=C>v?! 4kGX
$)C@/4ODZ5e D\<R=C>v@: :q?58. A6Aw@87N<- Gv4k <RGAF.?~>n A&G00z G%AX?!<- EX=:F.@G G%Gv@; AvA$GO4B @/4ODZ5e G%AX@G ;g?k@; 039_GO0m H.@eGO8g @e7AGO1b @'GX <<?vA3=@4O4Y. D\<R=C>v 8b9v=1@: DDG;EM?M A$:8 C38. ;j>w?! A>;gGO0m @V4B 1$9|@'GQ H8;g 9W A6Aw@G 9|@'8& 3*E83@4O4Y. D\<R=C>v@G @gA$@: @|@{@87N H8:q?! @GGX Cf4g5K4O4Y. @/4ODZ5e DA<R=C>v?!<-@G 8b9v=1@: @| <<0h >n4@ 0w?!<-3* @/4ODZ5e G%AX@; Av?xGO0m 1W H.@e0z 18Gv@; Av?xGO0m@ZGO4B A6Aw0z 03@N?!0T 039f5G>n @V=@4O4Y.
$)C4u @Z<<GQ 3;?k@: ?k>nA}, ?9A& @/4ODZ5e ;g?k 0!4I A&G0, 1b<z A$:8 9W 1bE8 @/?kGQ A$:88& B|A6GO=J=C?@.

View File

@ -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产品样本技术简介和参考资料。

View File

@ -0,0 +1,13 @@
コンピューターは、本質的には数字しか扱うことができません。コンピューターは、文字や記号などのそれぞれに番号を割り振ることによって扱えるようにします。ユニコードが出来るまでは、これらの番号を割り振る仕組みが何百種類も存在しました。どの一つをとっても、十分な文字を含んではいませんでした。例えば、欧州連合一つを見ても、そのすべての言語をカバーするためには、いくつかの異なる符号化の仕組みが必要でした。英語のような一つの言語に限っても、一つだけの符号化の仕組みでは、一般的に使われるすべての文字、句読点、技術的な記号などを扱うには不十分でした。
これらの符号化の仕組みは、相互に矛盾するものでもありました。二つの異なる符号化の仕組みが、二つの異なる文字に同一の番号を付けることもできるし、同じ文字に異なる番号を付けることもできるのです。どのようなコンピューターも(特にサーバーは)多くの異なった符号化の仕組みをサポートする必要があります。たとえデータが異なる符号化の仕組みやプラットフォームを通過しても、いつどこでデータが乱れるか分からない危険を冒すことのなるのです。
ユニコードはすべてを変えます
ユニコードは、プラットフォームに係わらず、プログラムに係わらず、言語に係わらず、すべての文字に独立した番号を与えます。ユニコード標準は、アップル、ヒューレットパッカード、IBM、ジャストシステム、マイクロソフト、オラクル、SAP、サン、サイベースなどの産業界の主導的企業と他の多くの企業に採用されています。ユニコードは、XML、Java、ECMAScript(JavaScript)、LDAP、CORBA 3.0などの最先端の標準の前提となっており、ユニコードを実装すれば、ISO/IEC 10646に適合することになります。ユニコードは、多くのオペレーティングシステムとすべての最新のブラウザーと他の多くの製品でサポートされています。ユニコード標準の出現とユニコードをサポートするツール類は、昨今顕著になっているソフトウエア技術のグローバル化の流れに対して、特に役に立っています。
ユニコードをクライアントサーバー型のアプリケーションや、多層構造を持つアプリケーション、ウェブサイトなどにに組み込むことで、従来の文字コードセットを用いるよりも明らかなコスト削減が可能です。ユニコードは、単一のソフトウエア製品、単一のウェブサイトに、何ら手を加えることなく、複数のプラットフォーム、複数の言語、複数の国をカバーすることが出来るのです。ユニコードは、データが多くの異なるシステムの間を、何の乱れもなしに転送することを可能とするのです。
ユニコードコンソーシアムについて
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
より詳しいことをお知りになりたい方は、Glossary, Unicode-Enabled Products, Technical Introduction および Useful Resourcesをご参照ください。

View File

@ -0,0 +1,13 @@
기본적으로 컴퓨터는 숫자만 처리합니다. 글자나 다른 문자에도 숫자를 지정하여 저장합니다. 유니코드가 개발되기 전에는 이러한 숫자를 지정하기 위해 수백 가지의 다른 기호화 시스템을 사용했습니다. 단일 기호화 방법으로는 모든 문자를 포함할 수 없었습니다. 예를 들어 유럽 연합에서만 보더라도 모든 각 나라별 언어를 처리하려면 여러 개의 다른 기호화 방법이 필요합니다. 영어와 같은 단일 언어의 경우도 공통적으로 사용되는 모든 글자, 문장 부호 및 테크니컬 기호에 맞는 단일 기호화 방법을 갖고 있지 못하였습니다.
이러한 기호화 시스템은 또한 다른 기호화 시스템과 충돌합니다. 즉 두 가지 기호화 방법이 두 개의 다른 문자에 대해 같은 번호를 사용하거나 같은 문자에 대해 다른 번호를 사용할 수 있습니다. 주어진 모든 컴퓨터(특히 서버)는 서로 다른 여러 가지 기호화 방법을 지원해야 합니다. 그러나, 데이터를 서로 다른 기호화 방법이나 플랫폼 간에 전달할 때마다 그 데이터는 항상 손상의 위험을 겪게 됩니다.
유니코드로 모든 것을 해결할 수 있습니다!
유니코드는 사용 중인 플랫폼, 프로그램, 언어에 관계없이 문자마다 고유한 숫자를 제공합니다. 유니코드 표준은 Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 및 기타 여러 회사와 같은 업계 선두주자에 의해 채택되었습니다. 유니코드는 XML, Java, ECMAScript(JavaScript), LDAP, CORBA 3.0, WML 등과 같이 현재 널리 사용되는 표준에서 필요하며 이는 ISO/IEC 10646을 구현하는 공식적인 방법입니다. 이는 많은 운영 체제, 요즘 사용되는 모든 브라우저 및 기타 많은 제품에서 지원됩니다. 유니코드 표준의 부상과 이를 지원하는 도구의 가용성은 최근 전 세계에 불고 있는 기술 경향에서 가장 중요한 부분을 차지하고 있습니다.
유니코드를 클라이언트-서버 또는 다중-연결 응용 프로그램과 웹 사이트에 통합하면 레거시 문자 세트 사용에 있어서 상당한 비용 절감 효과가 나타납니다. 유니코드를 통해 리엔지니어링 없이 다중 플랫폼, 언어 및 국가 간에 단일 소프트웨어 플랫폼 또는 단일 웹 사이트를 목표로 삼을 수 있습니다. 이를 사용하면 데이터를 손상 없이 여러 시스템을 통해 전송할 수 있습니다.
유니코드 콘소시엄에 대해
유니코드 콘소시엄은 비영리 조직으로서 현대 소프트웨어 제품과 표준에서 텍스트의 표현을 지정하는 유니코드 표준의 사용을 개발하고 확장하며 장려하기 위해 세워졌습니다. 콘소시엄 멤버쉽은 컴퓨터와 정보 처리 산업에 종사하고 있는 광범위한 회사 및 조직의 범위를 나타냅니다. 콘소시엄의 재정은 전적으로 회비에 의해 충당됩니다. 유니코드 컨소시엄에서의 멤버쉽은 전 세계 어느 곳에서나 유니코드 표준을 지원하고 그 확장과 구현을 지원하고자하는 조직과 개인에게 개방되어 있습니다.
더 자세한 내용은 용어집, 예제 유니코드 사용 가능 제품, 기술 정보 및 기타 유용한 정보를 참조하십시오.

View File

@ -0,0 +1,13 @@
コンピューターは、本質的には数字しか扱うことができません。コンピューターは、文字や記号などのそれぞれに番号を割り振ることによって扱えるようにします。ユニコードが出来るまでは、これらの番号を割り振る仕組みが何百種類も存在しました。どの一つをとっても、十分な文字を含んではいませんでした。例えば、欧州連合一つを見ても、そのすべての言語をカバーするためには、いくつかの異なる符号化の仕組みが必要でした。英語のような一つの言語に限っても、一つだけの符号化の仕組みでは、一般的に使われるすべての文字、句読点、技術的な記号などを扱うには不十分でした。
これらの符号化の仕組みは、相互に矛盾するものでもありました。二つの異なる符号化の仕組みが、二つの異なる文字に同一の番号を付けることもできるし、同じ文字に異なる番号を付けることもできるのです。どのようなコンピューターも(特にサーバーは)多くの異なった符号化の仕組みをサポートする必要があります。たとえデータが異なる符号化の仕組みやプラットフォームを通過しても、いつどこでデータが乱れるか分からない危険を冒すことのなるのです。
ユニコードはすべてを変えます
ユニコードは、プラットフォームに係わらず、プログラムに係わらず、言語に係わらず、すべての文字に独立した番号を与えます。ユニコード標準は、アップル、ヒューレットパッカード、IBM、ジャストシステム、マイクロソフト、オラクル、SAP、サン、サイベースなどの産業界の主導的企業と他の多くの企業に採用されています。ユニコードは、XML、Java、ECMAScript(JavaScript)、LDAP、CORBA 3.0などの最先端の標準の前提となっており、ユニコードを実装すれば、ISO/IEC 10646に適合することになります。ユニコードは、多くのオペレーティングシステムとすべての最新のブラウザーと他の多くの製品でサポートされています。ユニコード標準の出現とユニコードをサポートするツール類は、昨今顕著になっているソフトウエア技術のグローバル化の流れに対して、特に役に立っています。
ユニコードをクライアントサーバー型のアプリケーションや、多層構造を持つアプリケーション、ウェブサイトなどにに組み込むことで、従来の文字コードセットを用いるよりも明らかなコスト削減が可能です。ユニコードは、単一のソフトウエア製品、単一のウェブサイトに、何ら手を加えることなく、複数のプラットフォーム、複数の言語、複数の国をカバーすることが出来るのです。ユニコードは、データが多くの異なるシステムの間を、何の乱れもなしに転送することを可能とするのです。
ユニコードコンソーシアムについて
ユニコードコンソーシアムは、最新のソフトウエア製品と標準においてテキストを表現することを意味する“ユニコード標準”の構築、発展、普及、利用促進を目的として設立された非営利組織です。同コンソーシアムの会員は、コンピューターと情報処理に係わる広汎な企業や組織から構成されています。同コンソーシアムは、財政的には、純粋に会費のみによって運営されています。ユニコード標準を支持し、その拡張と実装を支援する世界中の組織や個人は、だれもがユニコードコンソーシアムの会員なることができます。
より詳しいことをお知りになりたい方は、Glossary, Unicode-Enabled Products, Technical Introduction および Useful Resourcesをご参照ください。

BIN
test/data/encodings/utf16be Normal file

Binary file not shown.

BIN
test/data/encodings/utf16le Normal file

Binary file not shown.

BIN
test/data/encodings/utf32be Normal file

Binary file not shown.

BIN
test/data/encodings/utf32le Normal file

Binary file not shown.

14
test/data/encodings/utf8 Normal file
View File

@ -0,0 +1,14 @@
Euro Symbol: €.
Greek: Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα.
Íslenska / Icelandic: Ég get etið gler án þess að meiða mig.
Polish: Mogę jeść szkło, i mi nie szkodzi.
Romanian: Pot să mănânc sticlă și ea nu mă rănește.
Ukrainian: Я можу їсти шкло, й воно мені не пошкодить.
Armenian: Կրնամ ապակի ուտել և ինծի անհանգիստ չըներ։
Georgian: მინას ვჭამ და არა მტკივა.
Hindi: मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा नहीं होती.
Hebrew(2): אני יכול לאכול זכוכית וזה לא מזיק לי.
Yiddish(2): איך קען עסן גלאָז און עס טוט מיר נישט װײ.
Arabic(2): أنا قادر على أكل الزجاج و هذا لا يؤلمني.
Japanese: 私はガラスを食べられます。それは私を傷つけません。
Thai: ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ

26
test/iso2022.js Normal file
View File

@ -0,0 +1,26 @@
var assert = require('assert'),
chardet = require('../');
describe('iso2022', function() {
it('should return ISO-2022-JP', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/iso2022jp'),
'ISO-2022-JP'
);
});
it('should return ISO-2022-KR', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/iso2022kr'),
'ISO-2022-KR'
);
});
it('should return ISO-2022-CN', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/iso2022cn'),
'ISO-2022-CN'
);
});
});

30
test/mbcs.js Normal file
View File

@ -0,0 +1,30 @@
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'
);
});
});

33
test/unicode.js Normal file
View File

@ -0,0 +1,33 @@
var assert = require('assert'),
chardet = require('../');
describe('unicode', function() {
it('should return UTF-16LE', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/utf16le'),
'UTF-16LE'
);
});
it('should return UTF-16BE', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/utf16be'),
'UTF-16BE'
);
});
it('should return UTF-32LE', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/utf32le'),
'UTF-32LE'
);
});
it('should return UTF-32BE', function() {
assert.equal(
chardet.detectFileSync(__dirname + '/data/encodings/utf32be'),
'UTF-32BE'
);
});
});

12
test/utf8.js Normal file
View File

@ -0,0 +1,12 @@
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'
);
});
});