From 6b8a4ba178184ee49eee07db1e50ee923afaf3d7 Mon Sep 17 00:00:00 2001 From: Dmitry Shirokov Date: Fri, 26 Jun 2026 12:38:59 +1000 Subject: [PATCH] chore: extend corpus with all supported encodings and langs --- .../generated/ASCII/en/validation/ascii.bin | 1 + corpus/generated/Big5/zh/validation/big5.bin | 2 + .../generated/EUC-JP/ja/validation/euc-jp.bin | 10 + .../generated/EUC-KR/ko/validation/euc-kr.bin | 13 + .../GB18030/zh/validation/gb18030.bin | 13 + .../ISO-2022-CN/zh/validation/iso2022cn.bin | 13 + .../ISO-2022-JP/ja/validation/iso2022jp.bin | 13 + .../ISO-2022-KR/ko/validation/iso2022kr.bin | 13 + .../ISO-8859-1/en/validation/iso88591-en.bin | 20 + .../ISO-8859-2/cs/validation/iso88592-cs.bin | 3 + .../ISO-8859-5/ru/validation/iso88595-ru.bin | 1 + .../ISO-8859-6/ar/validation/iso88596-ar.bin | 8 + .../ISO-8859-7/el/validation/iso88597-el.bin | 2 + .../ISO-8859-8/he/validation/iso88598-he.bin | 20 + .../ISO-8859-9/tr/validation/iso88599-tr.bin | 3 + .../generated/KOI8-R/ru/validation/koi8r.bin | 1 + .../Shift_JIS/ja/validation/shiftjis.bin | 13 + .../UTF-16BE/en/validation/utf16be.bin | Bin 0 -> 1334 bytes .../UTF-16LE/en/validation/utf16le.bin | Bin 0 -> 1334 bytes .../UTF-32BE/en/validation/utf32be.bin | Bin 0 -> 2664 bytes .../UTF-32LE/en/validation/utf32le.bin | Bin 0 -> 2664 bytes corpus/generated/UTF-8/en/validation/utf8.bin | 14 + corpus/generated/index.json | 408 +++++++++++++++++ .../cs/validation/windows-1250.bin | 5 + .../ru/validation/windows-1251.bin | 1 + .../en/validation/windows-1252.bin | 22 + .../el/validation/windows-1253.bin | 3 + .../tr/validation/windows-1254.bin | 4 + .../he/validation/windows-1255.bin | 32 ++ .../ar/validation/windows-1256.bin | 8 + .../et/validation/windows-1257-et.bin | 1 + .../lt/validation/windows-1257-lt.bin | 1 + .../lv/validation/windows-1257-lv.bin | 1 + .../vi/validation/windows-1258.bin | 1 + .../windows-874/th/validation/windows-874.bin | 1 + corpus/manifest.json | 428 ++++++++++++++++++ scripts/corpus-utils.mjs | 35 +- scripts/model-utils.mjs | 1 + scripts/validate.mjs | 139 ++---- src/encoding/iso2022.test.ts | 2 +- src/encoding/iso2022.ts | 2 +- 41 files changed, 1154 insertions(+), 104 deletions(-) create mode 100644 corpus/generated/ASCII/en/validation/ascii.bin create mode 100644 corpus/generated/Big5/zh/validation/big5.bin create mode 100644 corpus/generated/EUC-JP/ja/validation/euc-jp.bin create mode 100644 corpus/generated/EUC-KR/ko/validation/euc-kr.bin create mode 100644 corpus/generated/GB18030/zh/validation/gb18030.bin create mode 100644 corpus/generated/ISO-2022-CN/zh/validation/iso2022cn.bin create mode 100644 corpus/generated/ISO-2022-JP/ja/validation/iso2022jp.bin create mode 100644 corpus/generated/ISO-2022-KR/ko/validation/iso2022kr.bin create mode 100644 corpus/generated/ISO-8859-1/en/validation/iso88591-en.bin create mode 100644 corpus/generated/ISO-8859-2/cs/validation/iso88592-cs.bin create mode 100644 corpus/generated/ISO-8859-5/ru/validation/iso88595-ru.bin create mode 100644 corpus/generated/ISO-8859-6/ar/validation/iso88596-ar.bin create mode 100644 corpus/generated/ISO-8859-7/el/validation/iso88597-el.bin create mode 100644 corpus/generated/ISO-8859-8/he/validation/iso88598-he.bin create mode 100644 corpus/generated/ISO-8859-9/tr/validation/iso88599-tr.bin create mode 100644 corpus/generated/KOI8-R/ru/validation/koi8r.bin create mode 100644 corpus/generated/Shift_JIS/ja/validation/shiftjis.bin create mode 100644 corpus/generated/UTF-16BE/en/validation/utf16be.bin create mode 100644 corpus/generated/UTF-16LE/en/validation/utf16le.bin create mode 100644 corpus/generated/UTF-32BE/en/validation/utf32be.bin create mode 100644 corpus/generated/UTF-32LE/en/validation/utf32le.bin create mode 100644 corpus/generated/UTF-8/en/validation/utf8.bin create mode 100644 corpus/generated/windows-1250/cs/validation/windows-1250.bin create mode 100644 corpus/generated/windows-1251/ru/validation/windows-1251.bin create mode 100644 corpus/generated/windows-1252/en/validation/windows-1252.bin create mode 100644 corpus/generated/windows-1253/el/validation/windows-1253.bin create mode 100644 corpus/generated/windows-1254/tr/validation/windows-1254.bin create mode 100644 corpus/generated/windows-1255/he/validation/windows-1255.bin create mode 100644 corpus/generated/windows-1256/ar/validation/windows-1256.bin create mode 100644 corpus/generated/windows-1257/et/validation/windows-1257-et.bin create mode 100644 corpus/generated/windows-1257/lt/validation/windows-1257-lt.bin create mode 100644 corpus/generated/windows-1257/lv/validation/windows-1257-lv.bin create mode 100644 corpus/generated/windows-1258/vi/validation/windows-1258.bin create mode 100644 corpus/generated/windows-874/th/validation/windows-874.bin diff --git a/corpus/generated/ASCII/en/validation/ascii.bin b/corpus/generated/ASCII/en/validation/ascii.bin new file mode 100644 index 0000000..d86e6b0 --- /dev/null +++ b/corpus/generated/ASCII/en/validation/ascii.bin @@ -0,0 +1 @@ + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ \ No newline at end of file diff --git a/corpus/generated/Big5/zh/validation/big5.bin b/corpus/generated/Big5/zh/validation/big5.bin new file mode 100644 index 0000000..d6089ae --- /dev/null +++ b/corpus/generated/Big5/zh/validation/big5.bin @@ -0,0 +1,2 @@ +現┎戈癟м羆菏快そ㎝キ单诀穦〆穦快礚毁锚呼古砛璸购辨硓筁裹蹦ノ礚毁锚呼砞璸呼崩笆穨㎝诀篶ㄤ呼蹦ノ礚毁锚呼砞璸琵穦顶糷珹摧痚よ獽莉呼戈癟㎝ㄏノ呼狝叭礚毁锚呼古砛璸购箋贱ㄥ搂盢20134る15ら羭︽Ω羭快瓣悔IT蹲弘眒笆ぇΤ闽冈薄叫聅凝硂柑 +現┎璓崩笆ネ約獂莱ノ戈癟м現┎戈癟м羆菏快そ秨甶兜翠┦古砛璸购醇眶古砛璸购喘ら盽ネい縩伐ㄏノ戈癟の硄癟м躬纘膥尿ㄏノ戈癟の硄癟м古砛璸购砞Τ蝗簧贱疭﹚戳丁ЧΘ﹚璶―莉箋秘古砛靡の贱礟Τ闽冈薄叫聅凝硂柑 \ No newline at end of file diff --git a/corpus/generated/EUC-JP/ja/validation/euc-jp.bin b/corpus/generated/EUC-JP/ja/validation/euc-jp.bin new file mode 100644 index 0000000..b433417 --- /dev/null +++ b/corpus/generated/EUC-JP/ja/validation/euc-jp.bin @@ -0,0 +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坤氮笆惯で、面毖胳∷。毖胳の叹混に拉や呈がほぼ久糖して、胳萨恃步もほかのヨ〖ロッパ胳と孺べてとても警ないのはこのノルマンˇコンクエストによってである。それ笆涟は剩花であったイギリスの咐胳が、イギリスの诞虏超甸や阑喀荚や兜徽がノルマン客になり毖胳を厦さなくなった冯蔡、筋瘫の粗で词帽に厦せるように词燎步されていった。それとともに诞虏超甸やジェントリ〖がフランス胳にも夺いノルマン胳を厦し、阑喀荚がラテン胳を厦すようになりその冯蔡として驴くのラテン胳やフランス胳も稼脱されることになった。 + +カナダは傅毖挝竣瘫孟であった孟拌だが、その毖挝竣瘫孟にそれ笆涟はヌ〖ベルフランスであり、海でもフランス胳が蝗われ鲁けているケベック剑があることから、カナダ链挛の给脱胳として毖胳とフランス胳の尉数が扩年されており、息水蜡绍のサイトや措度の睛墒棱汤などは链て毖施尉咐胳で乖われている。奠毖挝の柜としては、链客庚の柒、毖胳を熟胳とする客の充圭は58%と你く、フランス胳が22%を狸める。これは、败瘫が润撅に驴いため妈企咐胳として毖胳を蝗脱している客庚が润撅に驴いからである。また、アメリカ圭桨柜が钨に疤弥していることから、奠毖挝であるとはいえ、オ〖ストラリアやインドなどほかの奠毖挝竣瘫孟とは般い、孺べるとカナダの毖胳はイギリス毖胳よりもアメリカ毖胳に夺いが、帽胳の闹りとしてはイギリス毖胳及を何脱することが驴い。ケベック剑ではフランス胳が给脱胳であることから、毖胳を熟胳とせず毖胳笨脱墙蜗が光くない客も警なくないが、ケベック剑とニュ〖ブランズウィック剑、オンタリオ剑笆嘲ではほとんどフランス胳が蝗われないこともあり、カナダ毖胳におけるフランス胳の逼读は厂痰に夺い。 \ No newline at end of file diff --git a/corpus/generated/EUC-KR/ko/validation/euc-kr.bin b/corpus/generated/EUC-KR/ko/validation/euc-kr.bin new file mode 100644 index 0000000..fb3cf07 --- /dev/null +++ b/corpus/generated/EUC-KR/ko/validation/euc-kr.bin @@ -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阑 备泅窍绰 傍侥利牢 规过涝聪促. 捞绰 腹篮 款康 眉力, 夸硫 荤侩登绰 葛电 宏扼快历 棺 扁鸥 腹篮 力前俊辑 瘤盔邓聪促. 蜡聪内靛 钎霖狼 何惑苞 捞甫 瘤盔窍绰 档备狼 啊侩己篮 弥辟 傈 技拌俊 阂绊 乐绰 扁贱 版氢俊辑 啊厘 吝夸茄 何盒阑 瞒瘤窍绊 乐嚼聪促. + +蜡聪内靛甫 努扼捞攫飘-辑滚 肚绰 促吝-楷搬 览侩 橇肺弊伐苞 昆 荤捞飘俊 烹钦窍搁 饭芭矫 巩磊 技飘 荤侩俊 乐绢辑 惑寸茄 厚侩 例皑 瓤苞啊 唱鸥吵聪促. 蜡聪内靛甫 烹秦 府浚瘤聪绢傅 绝捞 促吝 敲阀汽, 攫绢 棺 惫啊 埃俊 窜老 家橇飘傀绢 敲阀汽 肚绰 窜老 昆 荤捞飘甫 格钎肺 伙阑 荐 乐嚼聪促. 捞甫 荤侩窍搁 单捞磐甫 颊惑 绝捞 咯矾 矫胶袍阑 烹秦 傈价且 荐 乐嚼聪促. +蜡聪内靛 能家矫决俊 措秦 + +蜡聪内靛 能家矫决篮 厚康府 炼流栏肺辑 泅措 家橇飘傀绢 力前苞 钎霖俊辑 咆胶飘狼 钎泅阑 瘤沥窍绰 蜡聪内靛 钎霖狼 荤侩阑 俺惯窍绊 犬厘窍哥 厘妨窍扁 困秦 技况脸嚼聪促. 能家矫决 糕滚奖篮 哪腔磐客 沥焊 贸府 魂诀俊 辆荤窍绊 乐绰 堡裹困茄 雀荤 棺 炼流狼 裹困甫 唱鸥忱聪促. 能家矫决狼 犁沥篮 傈利栏肺 雀厚俊 狼秦 面寸邓聪促. 蜡聪内靛 牧家矫决俊辑狼 糕滚奖篮 傈 技拌 绢蠢 镑俊辑唱 蜡聪内靛 钎霖阑 瘤盔窍绊 弊 犬厘苞 备泅阑 瘤盔窍绊磊窍绰 炼流苞 俺牢俊霸 俺规登绢 乐嚼聪促. + +歹 磊技茄 郴侩篮 侩绢笼, 抗力 蜡聪内靛 荤侩 啊瓷 力前, 扁贱 沥焊 棺 扁鸥 蜡侩茄 沥焊甫 曼炼窍绞矫坷. diff --git a/corpus/generated/GB18030/zh/validation/gb18030.bin b/corpus/generated/GB18030/zh/validation/gb18030.bin new file mode 100644 index 0000000..26534d6 --- /dev/null +++ b/corpus/generated/GB18030/zh/validation/gb18030.bin @@ -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产品样本,技术简介和参考资料。 diff --git a/corpus/generated/ISO-2022-CN/zh/validation/iso2022cn.bin b/corpus/generated/ISO-2022-CN/zh/validation/iso2022cn.bin new file mode 100644 index 0000000..48f38a6 --- /dev/null +++ b/corpus/generated/ISO-2022-CN/zh/validation/iso2022cn.bin @@ -0,0 +1,13 @@ +$)A;y1>IO#,MPhR*:C<8VV2;M,5D1`Bk@40|@(KySP5DSoQT!#<4J9JG5%R;VVSoQT#,@}HgS"So#,R2C;SPDDR;8v1`Bk?IRTJJSCSZKySP5DWVD8#,1j5c7{:E#,:M3#SC5D<MJGK5#,A=VV1`Bk?ID\J9SCO`M,5DJ}WV4z1mA=8v2;M,5DWV7{#,;rJ9SC2;M,5DJ}WV4z1mO`M,5DWV7{!#HN:NR;L(LX6(5D]M(9}2;M,5D1`Bk;rF=L(V.]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-1;UbP)9$R5=g5DAl5!#WnPB5D1jW<6_5D4fTZ#,JG=|@4H+GrHm<~<=a:O#,1HJ9SC4+M3WV7{D\9;9a4)6`8vF=L(#,SoQT:M9z]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:M1jW5D1mJ>7(!#Q'JuQ';a5D;aT14z1mAK9c7:AlSr5D: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>#,<$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$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$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?$iAw$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\$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 diff --git a/corpus/generated/ISO-2022-KR/ko/validation/iso2022kr.bin b/corpus/generated/ISO-2022-KR/ko/validation/iso2022kr.bin new file mode 100644 index 0000000..b630d41 --- /dev/null +++ b/corpus/generated/ISO-2022-KR/ko/validation/iso2022kr.bin @@ -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 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 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 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 CpF.-<-9v 6G4B 4YA_-?,0a @@?k GA7N1W7%0z @% ;g@LF.?! EkGUGO8i 790E=C 9.@Z <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 n GC7'F{ 6G4B 4\@O @% ;g@LF.8& 8qG%7N ;o@; x@L ?)7/ =C=:E[@; EkGX @|<[GR v?! 4kGX + +$)C@/4ODZ5e D\v@: :q?58. A6Aw@87N<- Gv4k n A&G00z G%AX?!<- EX=:F.@G G%Gv@; AvA$GO4B @/4ODZ5e G%AX@G ;g?k@; 039_GO0m H.@eGO8g @e7AGO1b @'GX <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\v@G @gA$@: @|@{@87N H8:q?! @GGX Cf4g5K4O4Y. @/4ODZ5e DAv?!<-@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<nA}, ?9A& @/4ODZ5e ;g?k 0!4I A&G0, 1b4Pb_l(y%?0z$`U*+o%(bOXaU{;9)o($r{FV_yQhG~@R1?VVHJ&>WDh%&pu+lQu2RcPOf2$nfb@t46g}wIZujo#QYrR(sTP*!60cDs>f= zDhkY9qsWy5FY1Q)tN1TEOO;eh>zsa0ewKOcH7^TtLQVrs%iLc)=}-ZT@5oHZN%`Rq z!_W-8y!_()ykv#r*i)DLC-~m}uaTD@!TTcTn^ucLCeJN*X3f>f= zGf?;n%QJp+k$L&kY4KN2U_X36|0$LEyZs8^Pz-C0zY!?vH~Vd{WquQop$e?Eeiian z@Zxw|ed}tP-P-P#gVBOM?LP0R9V&h9Uh#h$x-%QgX6&f_W*^uQ`{_p3UbWZk1$*2U z*%Lq+JC+@>_x5+$1BiCm>xi$Q!#ENCBlw#uy-}Cwh~DhhGHvy8c+GmHZqtSub+L}? aQpahAjqBBVlWx)*kX@|Y1%9huqkjW$Q4L@K literal 0 HcmV?d00001 diff --git a/corpus/generated/UTF-16LE/en/validation/utf16le.bin b/corpus/generated/UTF-16LE/en/validation/utf16le.bin new file mode 100644 index 0000000000000000000000000000000000000000..cc14b49b3b9d24c73dc9a47b7fc0073e9a6250a5 GIT binary patch literal 1334 zcmYjQTT4_?6kg*#`_%4Xa~`rV2(~C_CAzZ4Pb_l(y%?0z$`U*+o%(bOXaU{;9)o($r{FV_yQhG~@R1?VVHJ&>WDh%&pu+lQu2RcPOf2$nfb@t46g}wIZujo#QYrR(sTP*!60cDs>f= zDhkY9qsWy5FY1Q)tN1TEOO;eh>zsa0ewKOcH7^TtLQVrs%iLc)=}-ZT@5oHZN%`Rq z!_W-8y!_()ykv#r*i)DLC-~m}uaTD@!TTcTn^ucLCeJN*X3f>f= zGf?;n%QJp+k$L&kY4KN2U_X36|0$LEyZs8^Pz-C0zY!?vH~Vd{WquQop$e?Eeiian z@Zxw|ed}tP-P-P#gVBOM?LP0R9V&h9Uh#h$x-%QgX6&f_W*^uQ`{_p3UbWZk1$*2U z*%Lq+JC+@>_x5+$1BiCm>xi$Q!#ENCBlw#uy-}Cwh~DhhGHvy8c+GmHZqtSub+L}? aQpahAjqBBVlWx)*kX@|Y1%9huqkjW$QVn1L literal 0 HcmV?d00001 diff --git a/corpus/generated/UTF-32BE/en/validation/utf32be.bin b/corpus/generated/UTF-32BE/en/validation/utf32be.bin new file mode 100644 index 0000000000000000000000000000000000000000..3ac038c5e10a0ab837ddc160db42beeb02b73ef8 GIT binary patch literal 2664 zcmZ{l$%~vt6u_&e`)ku4KIY&;0zw4?uEcT0xMmXLWLzM|jSxI^OmNhw!F>cZc#(i7 zy?F3Xh=_PFLB+%s4~n?qhR)>T0z&W)5P!ewS4~eyV1B$;Z>xIss=rAoZAmFT1&_mH zkl{{PghyZ(Xx|IhK<4itay^_5b71bC;9+FMb>B#-djvj&qwp2JjQjxJ4*fH9>UF<} z^~dN(M*gn)`|u`A=DfrDQ=mroJva=WDI-4zYL)%oLVgtX$$aa(=OL*3eu8eiKF{mg zGuA%8M1KPI!X9`u*7iGu43~tQN8S&{8L!{?-S8mji#tm0{{ZBW<~$kes+)5>Y{u3z zc<&jO!TRd|fq9-)G7O>SJ5&9&roIf?wOPORybZn1UZ3?Apq~Bq@RQS7jh^8lpnhj3 zoEA3oo&)Zxvk7U*0a9#l&;mIr(V3f-gPPUZh)&`GyaUc7iNKb?_C|Xt?1^IJ_uJ!jp)tRsU=6Rr2sj-O8+b^-!-VX=x z)o-AE`2L)izoC=NY5JFxrhkNA;cHkXE+fB(f5Jvgv3)yQ7v0#UiM4fjpVL2q^~@(` ze80?K{9fueC*I0{84U0brbhb=&O~QcgAS|-+gT%gjiCH&c2y4Ojn33m$`)IFcb#0z!!M>tj?|&C~|LV^GH4<+* zT>#O4!#y=iz}>lzvf(}(?yzAl#fB_#C)$6Qh}CEA-;ra!{_j@SDD{2|pYeZ8_&r1Y zP3%DT%{Z?*Gru_taH>A6_cQ)Hs@ohx{vK=f<%#t-=(Vpy=$y6Wc^{trguLS8Z51D~ ztnI@+|BUrgtp7sRnB(aG;;((pqC1lzI3IiT`+1U{`sb$9zZuTMpOKqJdY|uG|I)B+ zK)(s*V{Ojnk*(yATl~zu&;J-}DT{Aw$T@5?BVVywukLvZ`a00I1w0S7aX;!q*cXy- zNqKM1%6Av2>aTW)Tj+EARsBfGM~Sw2@cxiQo1v>)mh% z7`qc*1LDiK=Pu*|cqZ>Q_HPF%wcJ^|8alwYc&u}0E&aEvKp(xfXTUu989595MqBQy fT?@62ajvzW4VMFV-(CdduGn)UYwL5@?VA4qF3JmI literal 0 HcmV?d00001 diff --git a/corpus/generated/UTF-32LE/en/validation/utf32le.bin b/corpus/generated/UTF-32LE/en/validation/utf32le.bin new file mode 100644 index 0000000000000000000000000000000000000000..09a371ec4c99609276d340aafe2741668d0cd8cd GIT binary patch literal 2664 zcmZ{m+l!V}6o=m#kK;vjk;(|c76q-u8Al7p^6<@QGh+pwMZ}9Q9n!QJDf0wccq2kr zb<;(Ef)Ub1N=2ELc%evXctV}IQG-DG1ES}_weV$VE*{s~>+suq?fv@cnyRWkh7VyF z3T%WU@BzFF#`nQ8C~%rT7GkGCAJ{t>?8Ro?R}-r0XZQ)u!&NBcf5e^%|2OPuxE$*X zSbNOt{{UY@z2{rjzk)U2!#Pkx?Mqm--0vIs1;*~FzV&Az_q~X3eV*5~`Z?znv_Asx z!C8l5?YvDW&=Gb3yA!Ol-n{j@U=NtfJGzYj9+a^59Ef%L_B@H0wRr~by}$^lum3OD z=UJsd6SChoHJ_U13K%!0e$KoOKi}S*db=Ud{!ZlWX>WO|^FF@%+gVSEn0-gVyXqmP z<^m|7t~U4AcNXL76sY&x>piMxO`dfFzBzT8kQ(XdnRBMRW3?x=JUfHFy`!PwTNSX* z9``in8)RR5>$5pLvwId$$G=E3Tc z&eovbxx5o+9&fIdld9@dI0#KR0EK$}qY)d%?v40i>?tX11{or3%g9HhqY&$;~j;CnT}+49@F^L$m^gu8GJMxc&C|ati{aP`xmHVzxnI2P7QPSB4_=> zTHbZeu#LJs;Ctnp`J3bK?Raz8e>?Ql9fkX`)*q>@f5*==oyGU81#Rc_>|^`P-He>p zwR5=VqgdxXK4zUYPw@YNoU1{fZ_)(c#~Ju$6*_^!VWNIpZ(T#r$ax?hSagnwegv-7<%Cqu(!VFD%R@v H!7TU>G{_5M literal 0 HcmV?d00001 diff --git a/corpus/generated/UTF-8/en/validation/utf8.bin b/corpus/generated/UTF-8/en/validation/utf8.bin new file mode 100644 index 0000000..74d2b16 --- /dev/null +++ b/corpus/generated/UTF-8/en/validation/utf8.bin @@ -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: 喔夃副喔權竵喔脆笝喔佮福喔班笀喔佮箘喔斷箟 喙佮笗喙堗浮喔编笝喙勦浮喙堗笚喔赤箖喔箟喔夃副喔權箑喔堗箛喔 \ No newline at end of file diff --git a/corpus/generated/index.json b/corpus/generated/index.json index cc7e572..3790295 100644 --- a/corpus/generated/index.json +++ b/corpus/generated/index.json @@ -1,4 +1,28 @@ [ + { + "encoding": "ASCII", + "iconv": "ASCII", + "language": "en", + "split": "validation", + "document": "ascii", + "path": "ASCII/en/validation/ascii.bin", + "bytes": 95, + "highBytes": 0, + "uniqueHighBytes": 0, + "sha256": "cb2a9233adc1225c5c495c46e62cf6308223c5e241ef33ad109f03141b57966a" + }, + { + "encoding": "Big5", + "iconv": "BIG5", + "language": "zh", + "split": "validation", + "document": "big5", + "path": "Big5/zh/validation/big5.bin", + "bytes": 614, + "highBytes": 482, + "uniqueHighBytes": 74, + "sha256": "42be488e0536869cc8a00a703272f512065f632c0b14523a05b60c782bfd54ae" + }, { "encoding": "CP850", "iconv": "CP850", @@ -359,6 +383,42 @@ "uniqueHighBytes": 56, "sha256": "f6399d3705fc3e6c2a6427516ce6c8b9585a0a1e035b53a9efb7ef0811dd6a00" }, + { + "encoding": "EUC-JP", + "iconv": "EUC-JP", + "language": "ja", + "split": "validation", + "document": "euc-jp", + "path": "EUC-JP/ja/validation/euc-jp.bin", + "bytes": 3919, + "highBytes": 3802, + "uniqueHighBytes": 91, + "sha256": "1b92241ff0b70a1f92328710954623abdf3eb7c95377fdc79aaa7b5d2b9de2fd" + }, + { + "encoding": "EUC-KR", + "iconv": "EUC-KR", + "language": "ko", + "split": "validation", + "document": "euc-kr", + "path": "EUC-KR/ko/validation/euc-kr.bin", + "bytes": 2480, + "highBytes": 1972, + "uniqueHighBytes": 86, + "sha256": "652f9cc11fb159d2140ae74d6e56592c876b8e8173f58012ad3923e93e7b973f" + }, + { + "encoding": "GB18030", + "iconv": "GB18030", + "language": "zh", + "split": "validation", + "document": "gb18030", + "path": "GB18030/zh/validation/gb18030.bin", + "bytes": 1665, + "highBytes": 1398, + "uniqueHighBytes": 92, + "sha256": "21e69caa6a5a14070f4866788c9b583867d52fa9d61659c0baa5908dbefac815" + }, { "encoding": "IBM855", "iconv": "CP855", @@ -575,6 +635,54 @@ "uniqueHighBytes": 30, "sha256": "7f39f7fb36cbabea98997b9c390d71e0742ef2fad5c7deca432ee6444e164c49" }, + { + "encoding": "ISO-2022-CN", + "iconv": "ISO-2022-CN", + "language": "zh", + "split": "validation", + "document": "iso2022cn", + "path": "ISO-2022-CN/zh/validation/iso2022cn.bin", + "bytes": 1749, + "highBytes": 0, + "uniqueHighBytes": 0, + "sha256": "a0f48879d69ccc1fe35b57ad9eeb57fa725449390d57c20a6ea658a6cd08a410" + }, + { + "encoding": "ISO-2022-JP", + "iconv": "ISO-2022-JP", + "language": "ja", + "split": "validation", + "document": "iso2022jp", + "path": "ISO-2022-JP/ja/validation/iso2022jp.bin", + "bytes": 2924, + "highBytes": 0, + "uniqueHighBytes": 0, + "sha256": "83cd2e00e2fbbf2e62a9361e4d932d201b605d95862ddf721e83f13c44704306" + }, + { + "encoding": "ISO-2022-KR", + "iconv": "ISO-2022-KR", + "language": "ko", + "split": "validation", + "document": "iso2022kr", + "path": "ISO-2022-KR/ko/validation/iso2022kr.bin", + "bytes": 3172, + "highBytes": 0, + "uniqueHighBytes": 0, + "sha256": "9f1c332d47ba6bdc4995c052551955beaab1a16a42fb9a3be8732624b5ae92e7" + }, + { + "encoding": "ISO-8859-1", + "iconv": "ISO-8859-1", + "language": "en", + "split": "validation", + "document": "iso88591-en", + "path": "ISO-8859-1/en/validation/iso88591-en.bin", + "bytes": 2955, + "highBytes": 0, + "uniqueHighBytes": 0, + "sha256": "83511fea651c2af6480dc5d4ec4249a4e1cfae8b51c0cd739378beafe1ef3533" + }, { "encoding": "ISO-8859-10", "iconv": "ISO-8859-10", @@ -1079,6 +1187,18 @@ "uniqueHighBytes": 3, "sha256": "a815d6b249d38b71948eac38e0de8ff5dc4b1be0e04b1c108d75a0d9bba37a99" }, + { + "encoding": "ISO-8859-2", + "iconv": "ISO-8859-2", + "language": "cs", + "split": "validation", + "document": "iso88592-cs", + "path": "ISO-8859-2/cs/validation/iso88592-cs.bin", + "bytes": 1600, + "highBytes": 195, + "uniqueHighBytes": 15, + "sha256": "f1a8291a99b25f0761701a9fb1533fcb628d383fe1b3167db00e09c7834c46d9" + }, { "encoding": "ISO-8859-3", "iconv": "ISO-8859-3", @@ -1223,6 +1343,78 @@ "uniqueHighBytes": 4, "sha256": "282b08484ad284a0a069c2d8113e09bc80de8163fee60568042c538b0541fc3f" }, + { + "encoding": "ISO-8859-5", + "iconv": "ISO-8859-5", + "language": "ru", + "split": "validation", + "document": "iso88595-ru", + "path": "ISO-8859-5/ru/validation/iso88595-ru.bin", + "bytes": 1024, + "highBytes": 849, + "uniqueHighBytes": 40, + "sha256": "f11a3af5c7a48b8efa54a6d9a3deed1024026d3217ae54e5dd4bd36376ac90ec" + }, + { + "encoding": "ISO-8859-6", + "iconv": "ISO-8859-6", + "language": "ar", + "split": "validation", + "document": "iso88596-ar", + "path": "ISO-8859-6/ar/validation/iso88596-ar.bin", + "bytes": 2241, + "highBytes": 1818, + "uniqueHighBytes": 39, + "sha256": "5791e08dd2d378bf63d7ffdf8f6f98a3c6dadab28a6d022d9c4a3464e2790568" + }, + { + "encoding": "ISO-8859-7", + "iconv": "ISO-8859-7", + "language": "el", + "split": "validation", + "document": "iso88597-el", + "path": "ISO-8859-7/el/validation/iso88597-el.bin", + "bytes": 1033, + "highBytes": 862, + "uniqueHighBytes": 41, + "sha256": "3c1d3f53c5d4ef5008ae81c42590a8bafb9db9e8372fd32e0328e387a0a6b0a0" + }, + { + "encoding": "ISO-8859-8", + "iconv": "ISO-8859-8", + "language": "he", + "split": "validation", + "document": "iso88598-he", + "path": "ISO-8859-8/he/validation/iso88598-he.bin", + "bytes": 2353, + "highBytes": 1754, + "uniqueHighBytes": 29, + "sha256": "16201fb2102ac30a99b233b5bf4492de0cfc5ccd491bf54e03463a166725cf64" + }, + { + "encoding": "ISO-8859-9", + "iconv": "ISO-8859-9", + "language": "tr", + "split": "validation", + "document": "iso88599-tr", + "path": "ISO-8859-9/tr/validation/iso88599-tr.bin", + "bytes": 2424, + "highBytes": 219, + "uniqueHighBytes": 8, + "sha256": "36afc1fbadf619d08957e67711d1b349ad4d0c1c94cd9830710452ad6260915e" + }, + { + "encoding": "KOI8-R", + "iconv": "KOI8-R", + "language": "ru", + "split": "validation", + "document": "koi8r", + "path": "KOI8-R/ru/validation/koi8r.bin", + "bytes": 1024, + "highBytes": 849, + "uniqueHighBytes": 40, + "sha256": "66a605851fd5ed073b160b9659fff35763b3bf28b54b8c44e97d216c2eb89909" + }, { "encoding": "KOI8-U", "iconv": "KOI8-U", @@ -1511,6 +1703,222 @@ "uniqueHighBytes": 2, "sha256": "f1de58ca10bb5f70ac7da15bf7b8f21d388143fa5cb161d4a76de84cc15939f8" }, + { + "encoding": "Shift_JIS", + "iconv": "SHIFT_JIS", + "language": "ja", + "split": "validation", + "document": "shiftjis", + "path": "Shift_JIS/ja/validation/shiftjis.bin", + "bytes": 2816, + "highBytes": 2196, + "uniqueHighBytes": 97, + "sha256": "25d2f92edea94fb9f4573820d3af2c803811c46b9c5c2fbbe1044d55ba9175b3" + }, + { + "encoding": "UTF-16BE", + "iconv": "UTF-16BE", + "language": "en", + "split": "validation", + "document": "utf16be", + "path": "UTF-16BE/en/validation/utf16be.bin", + "bytes": 1334, + "highBytes": 151, + "uniqueHighBytes": 57, + "sha256": "a14f57e24aa8616fb6a64b16db08ff262680cff43584087fb9d96979839fcd30" + }, + { + "encoding": "UTF-16LE", + "iconv": "UTF-16LE", + "language": "en", + "split": "validation", + "document": "utf16le", + "path": "UTF-16LE/en/validation/utf16le.bin", + "bytes": 1334, + "highBytes": 151, + "uniqueHighBytes": 57, + "sha256": "816be5403655b0a5a31bb30399f3781c8afbdf68a7f25a3d6b39d726f746a82b" + }, + { + "encoding": "UTF-32BE", + "iconv": "UTF-32BE", + "language": "en", + "split": "validation", + "document": "utf32be", + "path": "UTF-32BE/en/validation/utf32be.bin", + "bytes": 2664, + "highBytes": 149, + "uniqueHighBytes": 56, + "sha256": "d29ceac909845a9eede9f24fdbe5f8e393c8c2d5a5232aabd4e22e084405a382" + }, + { + "encoding": "UTF-32LE", + "iconv": "UTF-32LE", + "language": "en", + "split": "validation", + "document": "utf32le", + "path": "UTF-32LE/en/validation/utf32le.bin", + "bytes": 2664, + "highBytes": 149, + "uniqueHighBytes": 56, + "sha256": "40cfd5c046b0d22c6f11c9b1f02a4cc89bf14a867211a11f17f248006b08d92b" + }, + { + "encoding": "UTF-8", + "iconv": "UTF-8", + "language": "en", + "split": "validation", + "document": "utf8", + "path": "UTF-8/en/validation/utf8.bin", + "bytes": 1125, + "highBytes": 798, + "uniqueHighBytes": 83, + "sha256": "fe505618a37cb7b6da30a1b8bae963c40dd101b116d1f4a3cb8eb9d9a86503cc" + }, + { + "encoding": "windows-1250", + "iconv": "WINDOWS-1250", + "language": "cs", + "split": "validation", + "document": "windows-1250", + "path": "windows-1250/cs/validation/windows-1250.bin", + "bytes": 1617, + "highBytes": 201, + "uniqueHighBytes": 21, + "sha256": "8992896bfd6f245cd2e16ca0d4289adf79b6184d9c3b0cab0982129c31a9f7db" + }, + { + "encoding": "windows-1251", + "iconv": "WINDOWS-1251", + "language": "ru", + "split": "validation", + "document": "windows-1251", + "path": "windows-1251/ru/validation/windows-1251.bin", + "bytes": 1024, + "highBytes": 849, + "uniqueHighBytes": 40, + "sha256": "b500694bcdbaae6a6da121801ac2b8b92f32326e956436031deb3abfb5a7e20e" + }, + { + "encoding": "windows-1252", + "iconv": "WINDOWS-1252", + "language": "en", + "split": "validation", + "document": "windows-1252", + "path": "windows-1252/en/validation/windows-1252.bin", + "bytes": 2976, + "highBytes": 8, + "uniqueHighBytes": 8, + "sha256": "ec96c434f49bd21cbd69c3861a2b4c57fb76fdc79e9eeb5d72891a39deb42c0e" + }, + { + "encoding": "windows-1253", + "iconv": "WINDOWS-1253", + "language": "el", + "split": "validation", + "document": "windows-1253", + "path": "windows-1253/el/validation/windows-1253.bin", + "bytes": 1052, + "highBytes": 869, + "uniqueHighBytes": 48, + "sha256": "706538dfe56c605855930d5e9afe09bdd9c7dc64c1f5bf6d720f1bcc369f9013" + }, + { + "encoding": "windows-1254", + "iconv": "WINDOWS-1254", + "language": "tr", + "split": "validation", + "document": "windows-1254", + "path": "windows-1254/tr/validation/windows-1254.bin", + "bytes": 2445, + "highBytes": 227, + "uniqueHighBytes": 16, + "sha256": "9dd8a74675228f13f86260c23ab9289762b6720616ded4f1cfd02eea8c87e710" + }, + { + "encoding": "windows-1255", + "iconv": "WINDOWS-1255", + "language": "he", + "split": "validation", + "document": "windows-1255", + "path": "windows-1255/he/validation/windows-1255.bin", + "bytes": 2405, + "highBytes": 1762, + "uniqueHighBytes": 37, + "sha256": "c98e32e8fcb9e9c171656d25a89ba7051153e9020500b33ccf74cec081cc9c00" + }, + { + "encoding": "windows-1256", + "iconv": "WINDOWS-1256", + "language": "ar", + "split": "validation", + "document": "windows-1256", + "path": "windows-1256/ar/validation/windows-1256.bin", + "bytes": 2241, + "highBytes": 1818, + "uniqueHighBytes": 39, + "sha256": "0898bf3f9c7d650dd41ab05823820296e8feeaccf27d9a5eac1da14b6e02c574" + }, + { + "encoding": "windows-1257", + "iconv": "WINDOWS-1257", + "language": "et", + "split": "validation", + "document": "windows-1257-et", + "path": "windows-1257/et/validation/windows-1257-et.bin", + "bytes": 225, + "highBytes": 7, + "uniqueHighBytes": 3, + "sha256": "34d0d40c80e2789f883c600a1afa64a8e8c928d7ba4911d0fdfa693154550711" + }, + { + "encoding": "windows-1257", + "iconv": "WINDOWS-1257", + "language": "lt", + "split": "validation", + "document": "windows-1257-lt", + "path": "windows-1257/lt/validation/windows-1257-lt.bin", + "bytes": 238, + "highBytes": 9, + "uniqueHighBytes": 5, + "sha256": "69609fe590767bc6f0b8ec8e2870cf58b80d506481937b9dc11cd2fe60b61df8" + }, + { + "encoding": "windows-1257", + "iconv": "WINDOWS-1257", + "language": "lv", + "split": "validation", + "document": "windows-1257-lv", + "path": "windows-1257/lv/validation/windows-1257-lv.bin", + "bytes": 233, + "highBytes": 22, + "uniqueHighBytes": 9, + "sha256": "6af5ca417fd5e536736f47b8fce54fa175759cb52ae2eda364678c75a348b0be" + }, + { + "encoding": "windows-1258", + "iconv": "WINDOWS-1258", + "language": "vi", + "split": "validation", + "document": "windows-1258", + "path": "windows-1258/vi/validation/windows-1258.bin", + "bytes": 260, + "highBytes": 73, + "uniqueHighBytes": 17, + "sha256": "bc99b00a81a61fd8b9aeb0cf09e67b09546a23fe2d20451e556a67a1fff2e943" + }, + { + "encoding": "windows-874", + "iconv": "WINDOWS-874", + "language": "th", + "split": "validation", + "document": "windows-874", + "path": "windows-874/th/validation/windows-874.bin", + "bytes": 86, + "highBytes": 84, + "uniqueHighBytes": 37, + "sha256": "b1dc8c286e0246a5c3890476da90fca474da11c5b18f353d74de3f9143122cda" + }, { "encoding": "x-mac-cyrillic", "iconv": "MAC-CYRILLIC", diff --git a/corpus/generated/windows-1250/cs/validation/windows-1250.bin b/corpus/generated/windows-1250/cs/validation/windows-1250.bin new file mode 100644 index 0000000..8f78952 --- /dev/null +++ b/corpus/generated/windows-1250/cs/validation/windows-1250.bin @@ -0,0 +1,5 @@ +Velk a Mal Tis je n醨odn prodn rezervace ev. . 498 pobl頌 m靤ta Lomnice nad Lu瀗ic v okrese Jind鴌ch鵹 Hradec le烅c na 鷝em CHKO T鴈bo騭ko. 豠d se mezi nejv齴namn靔氻 rybni鑞 rezervace v 萫sku a je v齴namn rozs醜l齧 litor醠n韒 porostem na b鴈z韈h rybn韐. Oblast spravuje AOPK 萊 Spr醰a CHKO T鴈bo騭ko a je evidov醤a i v r醡ci sv靦ov organizace UNESCO jako biosf閞ick rezervace, Natura 2000 a dal氻. D鵹odem ochrany je jedna z nejv齴namn靔氻ch ornitologick齝h rezervac v 萫sku. V齴nam m i z pohledu entomologick閔o. +Sou栳st rezervace je 11 v靦氻ch rybn韐, mimo jin i dvojice rybn韐 Velk a Mal Tis, kter daly lokalit n醶ev. Pro rybn韐y v rezervaci je charakteristick, 瀍 maj velmi 鑜enit pob鴈烅 tvo鴈n zarostl齧i b鴈hy, z醫okami, poloostrovy a ostr鵹ky. Na b鴈hy voln navazuj podm徼en louky, lesy, v鴈sovi歵 a pole. Vlivem rozmanitosti r鵽n齝h stanovi殱 se zde nach醶 bohat 鴄da druh z flory i fauny, kter zde s韉l. Hlavn ptactvo vyu烅v lokalitu jako d鵯e瀒tou migra鑞 zast醰ku 鑙 shroma瀌i歵 p鴈d pravideln齧i tahy. +I p鴈s to, 瀍 je lokalita po desetilet chr醤靚a, do歭o nevhodn齧i hospod狲sk齧i z醩ahy v podob nadm靣n閔o chovu ryb od 50. let 20. stolet k postupn degradaci a 鷖tupu litor醠n韈h porost. Od 90. let 20. stolet se ochran狲i sna烅 sni瀘v醤韒 po鑤u nasazovan齝h ryb a zm靚ou jejich druhov skladby spole鑞 s vodohospod狲sk齧i z醩ahy do v龤ky vodn hladiny rybn韐u Velk Tis podpo鴌t rozvoj r醟osov齝h porost. V齭ledky t靋hto opat鴈n uk醶aly, 瀍 na obnovu porost by i za vhodn齝h podm韓ek byla pot鴈ba doba dosahuj韈 a des韙ek let. + + \ No newline at end of file diff --git a/corpus/generated/windows-1251/ru/validation/windows-1251.bin b/corpus/generated/windows-1251/ru/validation/windows-1251.bin new file mode 100644 index 0000000..bd00c64 --- /dev/null +++ b/corpus/generated/windows-1251/ru/validation/windows-1251.bin @@ -0,0 +1 @@ +襄疴铎嚅 耦怵屐屙眍 忤溴 忸珥桕 觐眦 XIX 忮赅 疣犷麇 溻桄屙梃, 恹溻桧筲 赅麇耱忮 钿眍泐 桤 铖眍忭 蝠遽钼囗栝 忖邃屙桢 忸顸扈鬣耦忸泐 疣犷麇泐 漤. 1 爨 1886 泐溧 耦鲨嚯桉蜩麇耜桢, 觐祆箜桉蜩麇耜桢 囗囵蹊麇耜桢 铕汔龛玎鲨 沿 枢磬潲 篑蝠铊腓 扈蜩磴钼 溴祛眈蝠圉栝. 橡 疣玢铐 蜞觐 溴祛眈蝠圉梃 阻赅泐 4 爨 镱汨犭 耱 溴祛眈蝠囗蝾. 躅溴 镱耠邃钼噔 玎 桁 爨耨钼 恹耱箫脲龛 镳铗羼蜞 镳铗桠 驽耱铌桴 溴轳蜮栝 镱腓鲨 疱珞朦蜞蝈 忡瘥忄 犷灬 镱耠邃钼噔 镥疱耱疱腙 猁腩 筢栩 忸皴禳 镱腓鲥轳觇 扈龛祗 麇蜮屦 疣犷麒 (镱 礤觐蝾瘥 溧眄, 漕 蜩溴蜩 筢栩 疣礤睇鮗2]), 礤耜铍 溴蜿钼 麇腩忮 镱塍麒腓 疣礤龛. 项 钺忤礤龛 铕汔龛玎鲨 忡瘥忄 麇蜮屦 疣犷麒-囗囵蹊耱钼 猁腓 镳桡钼铕屙 镱忮龛 (怙铖脲漶蜮梃 猁腩 漕赅玎眍, 黩 钺忤礤龛 猁腩 腩骓)[3]. 褥屙眍 镟螯 赅珥疙睇 相痂骜觇 觐磴疱耨 II 软蝈痦圉桀磬豚 (棹朦 1889) 钺忤 1 爨 捻胳 耦腓溧痦铖蜩 疣犷麒 怦邈 扈疣 镳邃腩骅 彐邈钿眍 铗戾鬣螯 邈 溴祛眈蝠圉扈 耦鲨嚯 蝠遽钼囗扈. \ No newline at end of file diff --git a/corpus/generated/windows-1252/en/validation/windows-1252.bin b/corpus/generated/windows-1252/en/validation/windows-1252.bin new file mode 100644 index 0000000..4faae5d --- /dev/null +++ b/corpus/generated/windows-1252/en/validation/windows-1252.bin @@ -0,0 +1,22 @@ +What is Unicode? + +Unicode provides a unique number for every character, +no matter what the platform, +no matter what the program, +no matter what the language. + +Fundamentally, computers just deal with numbers. They store letters and other characters by assigning a number for each one. Before Unicode was invented, there were hundreds of different encoding systems for assigning these numbers. No single encoding could contain enough characters: for example, the European Union alone requires several different encodings to cover all its languages. Even for a single language like English no single encoding was adequate for all the letters, punctuation, and technical symbols in common use. + +These encoding systems also conflict with one another. That is, two encodings can use the same number for two different characters, or use different numbers for the same character. Any given computer (especially servers) needs to support many different encodings; yet whenever data is passed between different encodings or platforms, that data always runs the risk of corruption. +Unicode is changing all that! + +Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language. The Unicode Standard has been adopted by such industry leaders as Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys and many others. Unicode is required by modern standards such as XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML, etc., and is the official way to implement ISO/IEC 10646. It is supported in many operating systems, all modern browsers, and many other products. The emergence of the Unicode Standard, and the availability of tools supporting it, are among the most significant recent global software technology trends. + +Incorporating Unicode into client-server or multi-tiered applications and websites offers significant cost savings over the use of legacy character sets. Unicode enables a single software product or a single website to be targeted across multiple platforms, languages and countries without re-engineering. It allows data to be transported through many different systems without corruption. +About the Unicode Consortium + +The Unicode Consortium is a non-profit organization founded to develop, extend and promote use of the Unicode Standard, which specifies the representation of text in modern software products and standards. The membership of the consortium represents a broad spectrum of corporations and organizations in the computer and information processing industry. The consortium is supported financially solely through membership dues. Membership in the Unicode Consortium is open to organizations and individuals anywhere in the world who support the Unicode Standard and wish to assist in its extension and implementation. + +For more information, see the Glossary, Unicode Enabled Products, Technical Introduction and Useful Resources. + + \ No newline at end of file diff --git a/corpus/generated/windows-1253/el/validation/windows-1253.bin b/corpus/generated/windows-1253/el/validation/windows-1253.bin new file mode 100644 index 0000000..dcf1a89 --- /dev/null +++ b/corpus/generated/windows-1253/el/validation/windows-1253.bin @@ -0,0 +1,3 @@ + 酸 溺忐溏 酸糸黹贽 (脶. sermo vulgaris) 暹磲 蓓狎 矧-镬瘃蓦, 镳镞矧 赆臊痿彘 糸 溟犭蓐麸躜 艮 脶糸黹贽 汶筢 痫 镬殡稞眙犴 牾襁 篝轵 漉糸贻 屦狁鬟弪 艮 样灬掾 刘麸犟狒锺哚, 燧黢轵 秕 狨糨 镩 溟茈尻麸, 狃镪脒盹眙狎 彡 疱耖篌羼, 孱咫喵桤赆 篝轵 瘃戾 耧灬黹贻 汶箦 赆糗 麸 9 衢. + 镬殡秕燧礴 酸糸黹贽 溟蓥羼 狃 翮 腼泔翦黜殛 觌狍殛 酸糸黹贽 篝珥 瘃秭锺, 麸 脲铋朦汩 赆 翮 泷犰灬糸贽. 受痫獒 麽襻牯珩轶糸贶 翮 溏忐滹躜 酸糸黹贽 溴 屐鲠磉篝珀犴 疳褴 篝珥 翦耒 刘麸犟狒锺哚. ㈦脶 麽襻牯珩轶糸贶 翮 躔揆麽 痖栳睃 篝珥 镬殡秕燧礴 酸糸黹贽, 麸蹼荀轶麸 篝轵 瘃镢屙暹 祜聆蒡 麸躜, 痫臊 睐襁翦襻. 祥 疱耖篌羼镩 锺轶祜 艮 溏忐滹躜 酸糸黹贽 翮 疳耧躞檐骘蹴  瘃秭锺殛 疳褴  泷狃艮 汶筢, 屦彘滢 镩 灬耵躐咤 镤玢稞 篝 篚祓蓠狍灬  镬殡秕燧礴 酸糸黹贽 溟狍疖篝珀 箦 狃镪脒盹躞弪 溟犭蓐麸躜 狨艮 翮 疱襁镤. 硼彘滢 赆礤唑 酎翦 溴 戾糨泷狲 鳄礴糸贶 翮 赆桤戾耖磙 镬殡哚 豉 酸暨睐, 镩 戾脲翮糨 艮 脶掾 酸糸黹贽 瘃蒺彘 磲 黢珞殪镳镩稞 蒽戾箦 戾椟滹躜. + \ No newline at end of file diff --git a/corpus/generated/windows-1254/tr/validation/windows-1254.bin b/corpus/generated/windows-1254/tr/validation/windows-1254.bin new file mode 100644 index 0000000..d12a389 --- /dev/null +++ b/corpus/generated/windows-1254/tr/validation/windows-1254.bin @@ -0,0 +1,4 @@ +Leylek (Ciconia ciconia), leylekgiller (Ciconiidae) familyas齨dan b鼀黭 ve uzun bacakl bir ku t黵. Siyah kanat u鐄 t鼀lerinin d齨da tamamen beyazd齬, gagas ve bacaklar eri⺧inlerde k齬m齴, yavrularda ise siyaht齬. C黶sesi biraz farkl olan iki altt黵 ise Avrupa'da (kuzeyde Finlandiya'ya kadar), kuzeybat Afrika'da ve g黱eybat Asya'da (do饀da Kazakistan'齨 g黱eyine kadar) bulunur. Leylekler uzun mesafelere g鲧 ederler. 莖饀nlukla tropikal Sahraalt Afrika'dan G黱ey Afrika'n齨 g黱eyine ve hatta Hindistan altk齮as齨齨 g黱eyine kadar olan b鰈gede k ge鏸rirler. Avrupa'dan Afrika'ya g鲧 ederken Akdeniz 鼁erinden de餴l, do饀da Levant 鼁erinden, bat齞a da Cebelitar齥 Bo餫z'ndan ge鏴rler. Bunun nedeni u鏼ak i鏸n gereksinim duyduklar hava termallerinin deniz 鼁erinde oluamas齞齬. Yerde y黵黵ken durmadan, yavaa hareket ederler. Leylekgiller ailesinin di餰r 鼀eleri gibi boynu tamamen gerilmi 㧐kilde u鏰rlar. +Et鏸l olan leylek, b鯿ekler, bal齥, amfibiler, s黵黱genler, k黭 memeliler ve k黭 kuar gibi 鏾k geni bir yelpazede beslenir. Besinlerinin 鏾饀nu yerden, k齭a bitki 鰎t黶 i鏸nden ve s sulardan toplar. Tekei olarak 黵erler ancak yam boyunca s黵ecek bir 鏸ft ba瘕 kurmazlar. Hem erke餴 hem de di㱮si, 鐄buklardan olun ve birka y齦 kullan齦abilen b鼀黭 bir yuva yapar. Di㱮 leylek her y齦 bir kereli餴ne olmak 鼁ere d鰎t yumurta yumurtlar ve yavrular 33-34 g黱 sonra ayn anda olmamak 鼁ere yumurtadan 琮kar. 莍fti olu⺶uran kuar齨 ikisi de kulu鏺aya yatar ve birlikte yavrular beslerler. Yavrular yumurtadan 琮kt齥tan 58-64 g黱 sonra yuvadan ayr齦齬 ve 7 ila 20 g黱 daha ebeveynler taraf齨dan beslenir. +Leylek, D黱ya Do餫 ve Do餫l Kaynaklar Koruma Birli餴 (IUCN) taraf齨dan asgari endi㧐 alt齨daki t黵ler aras齨da s齨齠land齬齦mt齬. Orta 莂 boyunca ormanlar齨 azalmas leyleklerin yarar齨a olmu⺶ur ancak tar齧 pratiklerinin de餴esi ve sanayilee 19. y鼁y齦da ve 20. y鼁y齦齨 baar齨da Avrupa'n齨 baz b鰈gelerinde pop黮asyonlar齨齨 azalmas齨a ve hatta yok olmas齨a neden olmu⺶ur. Avrupa 鏰p齨daki koruma programlar齨齨 sonucunda leyleklerin tekrar Hollanda, Bel鏸ka, 輘vi鐁e ve 輘ve'te 黵emeleri sa餷anmt齬. Do餫l dmanlar齨齨 say齭 azd齬 ancak 鏴㱮tli parazitler tayabilir. Dikkat 鏴kici bir t黵 olan leylek tarih boyunca bulundu饀 b鰈gelerde 鏴㱮tli s鰕lencelere konu olmu⺶ur. Bunlar齨 en bilineni, bebeklerin leylekler taraf齨dan getirildi餴 s鰕lencesidir. + \ No newline at end of file diff --git a/corpus/generated/windows-1255/he/validation/windows-1255.bin b/corpus/generated/windows-1255/he/validation/windows-1255.bin new file mode 100644 index 0000000..461a9a8 --- /dev/null +++ b/corpus/generated/windows-1255/he/validation/windows-1255.bin @@ -0,0 +1,32 @@ +钿 驿 殄痖麇 (Unicode)? + +殄痖麇 铟鲣 铖豇 殚珏汩 祀 , +爨 铢痄 蜢 嚅驽 綮梏屮钿, +爨 铢痄 徉殒 腽辁, +屐 铢痄 徉殒 . + +徉弭 狁轳, 铉轫 蝈聍轫  犷耵. 漤 钹珩痖 噱妃 妃邋轫 噻 蜢-殂 澉鲟 铖豇 祀 噻 钿. 徼 溴铞 溟屦轺邈, 溟 钹妃 铗妃 鏖沐 疱 熹黯帔 漕耵 潇戾. 囿 爨 噻 钿 殡熹 熹腴 腩妃 彘 铖赭. 煦邂钹:  爨殓邈 溧轼弭嚅 疸轫 腩 皴忾 鏖沐汩 痖 蜢 铕 祀皴 帔 腱 澌翦 漕沐狲妃 徨. 辁轼 铈帔 囿 禊翡 徨沣, 腩 囵忪辁 祛, 爨 溟 汩 犷蝤膪 鏖沐 噻 狎徨 腱 溧妃殄, 耖铕 漪轳鬻 邃耦扉 滂腽殚 铄 梵. + +铗妃 鏖沐 囔 囿 皴妃 驽 帔 驽. 腱孱,  鏖沐汩 殡屐轫 熹铢 徉妃 铖豇 禊痖 轫 疳沆轫, 噱 熹铢 犷耵 痖 爨妃 . 蜢 腱 铉 (遽铋彗 ) 禚铄 犷耵   铗妃 鏖沐 疱; 噱祉 腱 嚅铤 痖 蝈狲轫 衢 铗妃 鏖沐 噱 綮梏屮铄 疱 鏖轫 漶殡屣 轸忸. +殄痖麇 铢痄 帔 腱 驿! + +殄痖麇 铟鲣 铖豇 殚珏汩 祀 , 祆 妃 狒扈翦, 狷咫痖, 噱 狴翡.  溟屦轺邈 噱铛 蜢-殂 漕遽殪轫 狷蝙殚 腩 Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys 屮衢 噻. 殄痖麇 疸 蜢-殂 痖 铄泺痖轫 腩 XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML 咫沐钿, 孱溴邃 祛蝙 帔 溟轾屙 澍   ISO/IEC 10646. 溴 瘊铌 蜢 殂 铗妃 漪蜢 妃, 腱 溷翥麴轫 溏汩, 孱弼 轫 噻. 溴趄  溟屦轺邈 彐铋疱 潆扉 潸孱腴 徨 痤疱 蝽 漕忸妃 潆祆-蝈祛殄 溏徨 衢妃, 帙 铖疱 爨瑛屦 徼腽屐邂殚 潸咫痄. + +戾 殄痖麇 衢轾孱 -祺彗 噱 衢轾孱轫 -徨 遽帔 嚅痂 钹豉 玳耠屣 痖滕 狎戾殄 祢孱 澌轭妁 狁泺妃 潸邋轫 漕皴殄. 溴沐 扉屦轺邈, 铄鲽 腽 噻 噱 帔 殓殂 狲 殡屐 熹獒 帔 轵汩 祛忮屣 綮梏屮铄, 帏鲥 妁翦 祆 鲥 狴轲彘轫 铠玳鏖. 殄痖麇 钹豉 铗狲 瘊屦轫 泺 铗妃 妃 妁屦妃 钺扉 轸忸. +豇栝 噱沐 澉屦皴殄  殄痖麇 (Unicode Consortium) + +澉屦皴殄  殄痖麇 溴 帏忮 祆 铊 彗 羼 脬 祠, 熹獒 屐縻 帔 澌轭妁 狷黠 殄痖麇, 帙 钼汩 帔 殚鲥 滂黢 犷弼 腽 妃黟轫 铄泺痖轫. 玑 狩屦皴殄 钼邋   忾汩 遴屦轫 狷蝙殚 漕琦衢 弪獒邈 漕殂. 澉屦皴殄 铑孱 蜢-殂 泐-玑 犰徙. 溏狲妃 狩屦皴殄 殄痖麇 酊彗 爨屦轫 屐囵 豇栝轫, 犭 衢 潋屐, 帙 铍轫 狷黠 殄痖麇 孱蝈痖轲轫 祚殚 徜妃 邃桀蝥. + +祛殂 疱耋,  铋戾 铄痃轫, 轭 珈鏖  铄鲽轫 铄铋 扉屦轺邈, 钺遴 桦痖 - 珏铠 蜴 [鏖 徉疴扉鷀. + + + 130 +132 +135 + +136 +2030 +137 + +138 +2039 \ No newline at end of file diff --git a/corpus/generated/windows-1256/ar/validation/windows-1256.bin b/corpus/generated/windows-1256/ar/validation/windows-1256.bin new file mode 100644 index 0000000..4cc460b --- /dev/null +++ b/corpus/generated/windows-1256/ar/validation/windows-1256.bin @@ -0,0 +1,8 @@ +奕 脱 1948 咔涫 轻沅剞 桃燎 沅 轻卿氏侨 轻妊碡卿 卺 葆迂礓. 绒硎 醚侵 轻州 轻垩软 蓓 庙窍 轻添 轻醚箱 融 轻舒揄 卺 鞘萸揄鞘 轻逑渖 (鞘萸揄鞘 焰嫌) 轻薯 娩迨 轻脱 谇 1949 嫜鱼 轻拖嫦 轻萸蔗 软 轻州 轻垩软 媲崦亚猪 轻薯 棉磴 卺礤 湘嵘 庞亚祈. 逍 轻拖嫦 (轻薯 屙 桃 沅 轻呜 轻梦盅) 帚 裴 轻州 轻垩软 轻桃 轻匝揄 徙享渖 轻尴印 茹 蓓 嗅 轻柔仙 轻尴磴伞 闱 谙 倘 轻阍茄. +抒 轻嫱仙 软 轻州薯 轻匝揄 (轻醚箱砩) 媲巅讶砩 (轻葆迂礓砩) 融 隳抒 醚硗 谇 1951 轻许 厍崛 惹徭拖. 籴 逍 轻嫱仙 耷沏 阙 轻州 轻匝揄 媲谑惹 缅轻 轻州 轻垩软 沔秦漤礓 醚箱眄 褪 谇 1988 阡香 扪 轻汜 陀礓 轻亚歪 葸 轻茄嗜秦 轻耷滏漤 媲崤锨秧 媲徙轻 (扪茄 葸 轻茄嗜秦) 蠕橇 卺 蒯 沅巽 轻释秧 轻葆迂礓砩 闱谙 轻面耷 轻薯 绒硎 阊嗜厣 阙 轻瓦驺 轻醚箱砩 褪 轻礞 沅 旁亚 媸陧礓鞘 嬲砬渖 後面耷 轻阌硗砩 媲崤俞倾砩 媲崾仪闱 闱犴. +蓓 5 鸵硌卿 1967 峭梳 庞亚祈 醚侵 轻州 轻垩软 (婷亚烛 梦鸯) 湃卿 脱 轻庙倾 轻邮 (轻溥由) 驷 室轻 轻州 吻众 崦瓦倾 鞘萸揄 啼磔 轻亚融 後醚侵 轻阃梳. 卺 轻眼 沅 嗅 耷闶 庞亚祈 热淝 轻谙硐 沅 轻茔邮尕淝 蓓 轻州. 咩 耷闶 庞亚祈 戎 轻尴 轻匝揄 嬷媲晚迩 仍哚 猛窍 轻糖淙 徙 碲恃 仍掩硎 轻闾抒 轻湘犴. 守徂 轻瓦驺 轻庞亚祈犴 卺 轻沅剞 怯 "礤嫦 嬖驺焰" (庙 "礤嫘 媲嵊倾焉") 晚 市哐 儒星 轻怯 蓓 轻嫠瞧 轻庞亚祈犴 轻延沩. +蓓 谇 1993 孓谑 庞亚祈 驺滟闵 轻释秧 轻葆迂礓砩 鞘萸揄 面俞 轻薯 湔 卺 呸倾 瓦驺 星薯 葆迂礓砩 氏硌 轻晚巧 轻阆漤 蓓 轻州 轻垩软 孓厍 垡 彷恃 卿兽轻砩 卺 娩 视拭漭 轻爿擎智 蓓 轻拗琼 轻闶绒砩 咔徂嫌 媲後翘祈. 嫒轻葳 孑 谇 1994 棉磴 轻俞厣 轻尕漤 轻葆迂礓砩 蓓 融 轻阆 媲徂鸯 轻葆迂礓砩 惹崾涎硖 驷咪迩 沅 卿瘦侵 轻棉侦 崆 视守碲 轻揄倾 孺翘惹叔 仍哚 淝掏. 崆 硪轻 邃沁 爿擎智 软 轻庞亚漆眄 媲彷嵊仨漤礓 驷咪迩 咚硌丘 闱 适谒 扔热 耪亚 庞亚祈 卺 闶侨谏 怯薯厍溴 蓓 轻州 轻垩软. + + +轻滔茄 轻萸蔗 萄 轻咚硌 沅 醚侵 轻州 轻垩软 +蓓 萌秧 2002 匝谑 轻瓦驺 轻庞亚祈犴 妊魄由 醚眄 郧焰 热淝 滔茄 萸蔗 软溴 嫒礓 轻葆迂礓眄 锨吾 醚侵 轻州 轻垩软 耷崾 娩 儒陷 豌琼 庞亚祈 沅 轻阢犴鞘 轻谟哐砩 轻葆迂礓砩. 徇溴 寝手 轻咚硌 沅 轻醚侵 轻葆迂礓砩 嬗清 蓓 磐咔 轻驼茄 卺 轻在 轻葆迂礓 媾蒉茄 寝收窍 轻尕漤 仍哚 匀 咔汜. 咩 抒 谝 阆 嫒嵯鞘 冗倾徨 阡 阃碡迩 轻葆迂礓. \ No newline at end of file diff --git a/corpus/generated/windows-1257/et/validation/windows-1257-et.bin b/corpus/generated/windows-1257/et/validation/windows-1257-et.bin new file mode 100644 index 0000000..e0a7618 --- /dev/null +++ b/corpus/generated/windows-1257/et/validation/windows-1257-et.bin @@ -0,0 +1 @@ +Tallinnas kohtuvad vana arhitektuur ja kaasaegne linnakeskkond. Kohalikud elanikud loevad hommikul uudiseid, s鮥davad t鲻le ning veedavad 鮤tul aega pere ja s鮬radega. Mere l鋒edus m鮦utab ilma ja annab linnale erilise ilme. diff --git a/corpus/generated/windows-1257/lt/validation/windows-1257-lt.bin b/corpus/generated/windows-1257/lt/validation/windows-1257-lt.bin new file mode 100644 index 0000000..97aa9d0 --- /dev/null +++ b/corpus/generated/windows-1257/lt/validation/windows-1257-lt.bin @@ -0,0 +1 @@ +Vilnius gars雑a senamies鑙u, liomis erdv雖is ir gyvybingu kult鹯iniu gyvenimu. Miesto on雜 kasdien dirba, mokosi, skaito naujienas ir susitinka su draugais. Skirtingi rajonai pasakoja savitas istorijas apie miesto praeit ir dabart. diff --git a/corpus/generated/windows-1257/lv/validation/windows-1257-lv.bin b/corpus/generated/windows-1257/lv/validation/windows-1257-lv.bin new file mode 100644 index 0000000..495d9c7 --- /dev/null +++ b/corpus/generated/windows-1257/lv/validation/windows-1257-lv.bin @@ -0,0 +1 @@ +R頶a atrodas pie Daugavas un ir paz顂tama ar savu arhitekt鹯u, parkiem un ros頶o kult鹯as dz顅i. Pils鐃as iedz顅ot鈐i ikdien dodas uz darbu, m鈉鈙, lasa zi騛s un pavada laiku kop ar 靑meni. Dadie rajoni glab at痦ir頶us st鈙tus. diff --git a/corpus/generated/windows-1258/vi/validation/windows-1258.bin b/corpus/generated/windows-1258/vi/validation/windows-1258.bin new file mode 100644 index 0000000..02b12cc --- /dev/null +++ b/corpus/generated/windows-1258/vi/validation/windows-1258.bin @@ -0,0 +1 @@ +H N趄i c nhi晏u h籼, h鄋g c鈟 xanh v nhng khu ph綮 mang d忪u 忪n li騝h s. M艮i ng鄖, ng蘨 d鈔 餴 l鄊, ho騝 t怛p, 餺騝 tin tc v g泸p g蹀 ba騨 b. Nhi騪 s綮ng hi牝n 餫騣 ho蘟 c鵱g c醕 truy晏n th綮ng l鈛 瘐蘨 ta騩 n阯 ba襫 s沆c ri阯g cu襛 th鄋h ph綮. diff --git a/corpus/generated/windows-874/th/validation/windows-874.bin b/corpus/generated/windows-874/th/validation/windows-874.bin new file mode 100644 index 0000000..d0ae347 --- /dev/null +++ b/corpus/generated/windows-874/th/validation/windows-874.bin @@ -0,0 +1 @@ +幻朽啡浞铝涨巡垢妹练砧Тб玲判琳幻星训匀沂得炻仪挂 假椁广酪梢浞裸埂颐首柰室梅亍茄 diff --git a/corpus/manifest.json b/corpus/manifest.json index 5121f91..dd9d525 100644 --- a/corpus/manifest.json +++ b/corpus/manifest.json @@ -1,5 +1,433 @@ { "encodings": [ + { + "name": "ASCII", + "iconv": "ASCII", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "ascii", + "path": "src/test/data/encodings/ascii" + } + ] + }, + { + "name": "ISO-2022-JP", + "iconv": "ISO-2022-JP", + "model": false, + "fixtures": [ + { + "language": "ja", + "split": "validation", + "document": "iso2022jp", + "path": "src/test/data/encodings/iso2022jp" + } + ] + }, + { + "name": "ISO-2022-KR", + "iconv": "ISO-2022-KR", + "model": false, + "fixtures": [ + { + "language": "ko", + "split": "validation", + "document": "iso2022kr", + "path": "src/test/data/encodings/iso2022kr" + } + ] + }, + { + "name": "ISO-2022-CN", + "iconv": "ISO-2022-CN", + "model": false, + "fixtures": [ + { + "language": "zh", + "split": "validation", + "document": "iso2022cn", + "path": "src/test/data/encodings/iso2022cn" + } + ] + }, + { + "name": "ISO-8859-1", + "iconv": "ISO-8859-1", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "iso88591-en", + "path": "src/test/data/encodings/iso88591_en" + } + ] + }, + { + "name": "ISO-8859-2", + "iconv": "ISO-8859-2", + "model": false, + "fixtures": [ + { + "language": "cs", + "split": "validation", + "document": "iso88592-cs", + "path": "src/test/data/encodings/iso88592_cs" + } + ] + }, + { + "name": "ISO-8859-5", + "iconv": "ISO-8859-5", + "model": false, + "fixtures": [ + { + "language": "ru", + "split": "validation", + "document": "iso88595-ru", + "path": "src/test/data/encodings/iso88595_ru" + } + ] + }, + { + "name": "ISO-8859-6", + "iconv": "ISO-8859-6", + "model": false, + "fixtures": [ + { + "language": "ar", + "split": "validation", + "document": "iso88596-ar", + "path": "src/test/data/encodings/iso88596_ar" + } + ] + }, + { + "name": "ISO-8859-7", + "iconv": "ISO-8859-7", + "model": false, + "fixtures": [ + { + "language": "el", + "split": "validation", + "document": "iso88597-el", + "path": "src/test/data/encodings/iso88597_el" + } + ] + }, + { + "name": "ISO-8859-8", + "iconv": "ISO-8859-8", + "model": false, + "fixtures": [ + { + "language": "he", + "split": "validation", + "document": "iso88598-he", + "path": "src/test/data/encodings/iso88598_he" + } + ] + }, + { + "name": "ISO-8859-9", + "iconv": "ISO-8859-9", + "model": false, + "fixtures": [ + { + "language": "tr", + "split": "validation", + "document": "iso88599-tr", + "path": "src/test/data/encodings/iso88599_tr" + } + ] + }, + { + "name": "Big5", + "iconv": "BIG5", + "model": false, + "fixtures": [ + { + "language": "zh", + "split": "validation", + "document": "big5", + "path": "src/test/data/encodings/big5" + } + ] + }, + { + "name": "EUC-JP", + "iconv": "EUC-JP", + "model": false, + "fixtures": [ + { + "language": "ja", + "split": "validation", + "document": "euc-jp", + "path": "src/test/data/encodings/euc_jp" + } + ] + }, + { + "name": "EUC-KR", + "iconv": "EUC-KR", + "model": false, + "fixtures": [ + { + "language": "ko", + "split": "validation", + "document": "euc-kr", + "path": "src/test/data/encodings/euc_kr" + } + ] + }, + { + "name": "GB18030", + "iconv": "GB18030", + "model": false, + "fixtures": [ + { + "language": "zh", + "split": "validation", + "document": "gb18030", + "path": "src/test/data/encodings/gb18030" + } + ] + }, + { + "name": "KOI8-R", + "iconv": "KOI8-R", + "model": false, + "fixtures": [ + { + "language": "ru", + "split": "validation", + "document": "koi8r", + "path": "src/test/data/encodings/koi8r" + } + ] + }, + { + "name": "Shift_JIS", + "iconv": "SHIFT_JIS", + "model": false, + "fixtures": [ + { + "language": "ja", + "split": "validation", + "document": "shiftjis", + "path": "src/test/data/encodings/shiftjis" + } + ] + }, + { + "name": "UTF-8", + "iconv": "UTF-8", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "utf8", + "path": "src/test/data/encodings/utf8" + } + ] + }, + { + "name": "UTF-16BE", + "iconv": "UTF-16BE", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "utf16be", + "path": "src/test/data/encodings/utf16be" + } + ] + }, + { + "name": "UTF-16LE", + "iconv": "UTF-16LE", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "utf16le", + "path": "src/test/data/encodings/utf16le" + } + ] + }, + { + "name": "UTF-32BE", + "iconv": "UTF-32BE", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "utf32be", + "path": "src/test/data/encodings/utf32be" + } + ] + }, + { + "name": "UTF-32LE", + "iconv": "UTF-32LE", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "utf32le", + "path": "src/test/data/encodings/utf32le" + } + ] + }, + { + "name": "windows-874", + "iconv": "WINDOWS-874", + "model": false, + "fixtures": [ + { + "language": "th", + "split": "validation", + "document": "windows-874", + "path": "src/test/data/encodings/windows_874" + } + ] + }, + { + "name": "windows-1250", + "iconv": "WINDOWS-1250", + "model": false, + "fixtures": [ + { + "language": "cs", + "split": "validation", + "document": "windows-1250", + "path": "src/test/data/encodings/windows_1250" + } + ] + }, + { + "name": "windows-1251", + "iconv": "WINDOWS-1251", + "model": false, + "fixtures": [ + { + "language": "ru", + "split": "validation", + "document": "windows-1251", + "path": "src/test/data/encodings/windows_1251" + } + ] + }, + { + "name": "windows-1252", + "iconv": "WINDOWS-1252", + "model": false, + "fixtures": [ + { + "language": "en", + "split": "validation", + "document": "windows-1252", + "path": "src/test/data/encodings/windows_1252" + } + ] + }, + { + "name": "windows-1253", + "iconv": "WINDOWS-1253", + "model": false, + "fixtures": [ + { + "language": "el", + "split": "validation", + "document": "windows-1253", + "path": "src/test/data/encodings/windows_1253" + } + ] + }, + { + "name": "windows-1254", + "iconv": "WINDOWS-1254", + "model": false, + "fixtures": [ + { + "language": "tr", + "split": "validation", + "document": "windows-1254", + "path": "src/test/data/encodings/windows_1254" + } + ] + }, + { + "name": "windows-1255", + "iconv": "WINDOWS-1255", + "model": false, + "fixtures": [ + { + "language": "he", + "split": "validation", + "document": "windows-1255", + "path": "src/test/data/encodings/windows_1255" + } + ] + }, + { + "name": "windows-1256", + "iconv": "WINDOWS-1256", + "model": false, + "fixtures": [ + { + "language": "ar", + "split": "validation", + "document": "windows-1256", + "path": "src/test/data/encodings/windows_1256" + } + ] + }, + { + "name": "windows-1257", + "iconv": "WINDOWS-1257", + "model": false, + "fixtures": [ + { + "language": "et", + "split": "validation", + "document": "windows-1257-et", + "path": "src/test/data/encodings/windows_1257_et" + }, + { + "language": "lt", + "split": "validation", + "document": "windows-1257-lt", + "path": "src/test/data/encodings/windows_1257_lt" + }, + { + "language": "lv", + "split": "validation", + "document": "windows-1257-lv", + "path": "src/test/data/encodings/windows_1257_lv" + } + ] + }, + { + "name": "windows-1258", + "iconv": "WINDOWS-1258", + "model": false, + "fixtures": [ + { + "language": "vi", + "split": "validation", + "document": "windows-1258", + "path": "src/test/data/encodings/windows_1258" + } + ] + }, { "name": "KOI8-U", "iconv": "KOI8-U", "languages": ["uk"] }, { "name": "IBM866", "iconv": "CP866", "languages": ["ru"] }, { "name": "IBM855", "iconv": "CP855", "languages": ["ru", "sr"] }, diff --git a/scripts/corpus-utils.mjs b/scripts/corpus-utils.mjs index 0d6b230..8f17463 100644 --- a/scripts/corpus-utils.mjs +++ b/scripts/corpus-utils.mjs @@ -103,6 +103,36 @@ export function buildCorpus(destination) { const ngrams = []; for (const encoding of manifest.encodings) { + if (encoding.fixtures) { + for (const fixture of encoding.fixtures) { + const encoded = readFileSync(join(root, fixture.path)); + const outputPath = join( + destination, + encoding.name, + fixture.language, + fixture.split, + `${fixture.document}.bin`, + ); + mkdirSync(dirname(outputPath), { recursive: true }); + writeFileSync(outputPath, encoded); + + const highBytes = [...encoded].filter((byte) => byte >= 0x80); + index.push({ + encoding: encoding.name, + iconv: encoding.iconv, + language: fixture.language, + split: fixture.split, + document: fixture.document, + path: relative(destination, outputPath), + bytes: encoded.length, + highBytes: highBytes.length, + uniqueHighBytes: new Set(highBytes).size, + sha256: sha256(encoded), + }); + } + continue; + } + for (const languageCode of encoding.languages) { const language = sourceByLanguage.get(languageCode); if (!language) @@ -182,7 +212,10 @@ export function buildCorpus(destination) { if (document.split === 'train') trainBuffers.push(encoded); } - if (modelHighByteCount < 10 || modelHighByteValues.size < 3) { + if ( + encoding.name !== 'ASCII' && + (modelHighByteCount < 10 || modelHighByteValues.size < 3) + ) { throw new Error( `${encoding.name}/${languageCode} has insufficient high-byte coverage`, ); diff --git a/scripts/model-utils.mjs b/scripts/model-utils.mjs index 7c66d93..5583f77 100644 --- a/scripts/model-utils.mjs +++ b/scripts/model-utils.mjs @@ -200,6 +200,7 @@ function statisticallyCompetitive(best, candidate) { function compileSingleByteModels() { const models = []; for (const encoding of manifest.encodings) { + if (encoding.model === false || encoding.fixtures) continue; if (encoding.name === 'CP949') continue; const byteMap = byteMapFor(encoding.iconv); diff --git a/scripts/validate.mjs b/scripts/validate.mjs index 80c2aeb..5886441 100644 --- a/scripts/validate.mjs +++ b/scripts/validate.mjs @@ -15,15 +15,7 @@ function option(name, fallback) { return arg ? arg.slice(prefix.length) : fallback; } -function percent(value, total) { - return total === 0 ? '0.00%' : `${((value / total) * 100).toFixed(2)}%`; -} - -function increment(object, key) { - object[key] = (object[key] ?? 0) + 1; -} - -const split = option('split', 'all'); +const split = option('split', 'validation'); const rows = corpusIndex.filter( (row) => split === 'all' || row.split === split, ); @@ -49,107 +41,52 @@ const results = rows.map((row) => { }; }); +function ok(value) { + return value ? '鉁' : '鉂'; +} + +function percent(value, total) { + return total === 0 ? '0.00%' : `${((value / total) * 100).toFixed(2)}%`; +} + const summary = { files: results.length, + predicted: results.filter((result) => result.predicted !== null).length, encodingCorrect: results.filter((result) => result.encodingCorrect).length, languageCorrect: results.filter((result) => result.languageCorrect).length, - noPrediction: results.filter((result) => result.predicted === null).length, }; -const bySplit = {}; -const byExpectedEncoding = {}; -const topPredictions = {}; - -for (const result of results) { - const splitSummary = (bySplit[result.expected.split] ??= { - files: 0, - encodingCorrect: 0, - languageCorrect: 0, - }); - splitSummary.files += 1; - if (result.encodingCorrect) splitSummary.encodingCorrect += 1; - if (result.languageCorrect) splitSummary.languageCorrect += 1; - - const encodingSummary = (byExpectedEncoding[result.expected.encoding] ??= { - files: 0, - encodingCorrect: 0, - languageCorrect: 0, - predictions: {}, - }); - encodingSummary.files += 1; - if (result.encodingCorrect) encodingSummary.encodingCorrect += 1; - if (result.languageCorrect) encodingSummary.languageCorrect += 1; - increment(encodingSummary.predictions, result.predicted?.name ?? ''); - increment(topPredictions, result.predicted?.name ?? ''); -} - console.log('Library corpus validation'); console.log('========================='); -console.log(`Split: ${split}`); -console.log(`Files: ${summary.files}`); -console.log( - `Encoding correct: ${summary.encodingCorrect}/${summary.files} (${percent( - summary.encodingCorrect, - summary.files, - )})`, -); -console.log( - `Language correct: ${summary.languageCorrect}/${summary.files} (${percent( - summary.languageCorrect, - summary.files, - )})`, -); -console.log(`No prediction: ${summary.noPrediction}`); - -console.log('\nBy split'); -console.table( - Object.entries(bySplit).map(([name, item]) => ({ - split: name, - files: item.files, - encodingCorrect: item.encodingCorrect, - encodingAccuracy: percent(item.encodingCorrect, item.files), - languageCorrect: item.languageCorrect, - languageAccuracy: percent(item.languageCorrect, item.files), - })), -); - -console.log('\nBy expected encoding'); -console.table( - Object.entries(byExpectedEncoding) - .sort(([left], [right]) => left.localeCompare(right)) - .map(([encoding, item]) => ({ - encoding, - files: item.files, - encodingCorrect: item.encodingCorrect, - encodingAccuracy: percent(item.encodingCorrect, item.files), - languageCorrect: item.languageCorrect, - mostCommonPrediction: Object.entries(item.predictions).sort( - ([leftName, leftCount], [rightName, rightCount]) => - rightCount - leftCount || leftName.localeCompare(rightName), - )[0][0], - })), -); - -console.log('\nTop predicted encodings'); +console.log(''); // empty line +const summaryRows = [ + ['Split', split], + ['Files', summary.files], + ['Coverage', percent(summary.predicted, summary.files)], + ['Encoding Accuracy', percent(summary.encodingCorrect, summary.files)], + ['Language Accuracy', percent(summary.languageCorrect, summary.files)], +]; +const summaryWidth = Math.max(...summaryRows.map(([label]) => label.length)); +for (const [label, value] of summaryRows) { + console.log(`${label.padEnd(summaryWidth)} ${value}`); +} +console.log(''); console.table( - Object.entries(topPredictions) + results .sort( - ([leftName, leftCount], [rightName, rightCount]) => - rightCount - leftCount || leftName.localeCompare(rightName), + (left, right) => + `${left.expected.encoding}/${left.expected.language}`.localeCompare( + `${right.expected.encoding}/${right.expected.language}`, + ) || left.expected.path.localeCompare(right.expected.path), ) - .map(([encoding, count]) => ({ encoding, count })), -); - -const failures = results.filter((result) => !result.encodingCorrect); -console.log('\nFirst 20 encoding mismatches'); -console.table( - failures.slice(0, 20).map((result) => ({ - expected: result.expected.encoding, - language: result.expected.language, - split: result.expected.split, - predicted: result.predicted?.name ?? '', - predictedLanguage: result.predicted?.lang ?? '', - confidence: result.predicted?.confidence ?? '', - path: result.expected.path, - })), + .map((result) => ({ + expected: result.expected.encoding, + lang: result.expected.language, + predicted: result.predicted?.name ?? '', + predictedLang: result.predicted?.lang ?? '', + confidence: result.predicted?.confidence ?? '', + encodingOk: ok(result.encodingCorrect), + languageOk: ok(result.languageCorrect), + path: result.expected.path, + })), ); diff --git a/src/encoding/iso2022.test.ts b/src/encoding/iso2022.test.ts index 15b611b..320e1e1 100644 --- a/src/encoding/iso2022.test.ts +++ b/src/encoding/iso2022.test.ts @@ -20,7 +20,7 @@ describe('ISO-2022', () => { it('should return ISO-2022-KR', () => { expect(analyse('iso2022kr')).toEqual({ confidence: 100, - lang: 'kr', + lang: 'ko', name: 'ISO-2022-KR', }); }); diff --git a/src/encoding/iso2022.ts b/src/encoding/iso2022.ts index 6252639..4ef85fa 100644 --- a/src/encoding/iso2022.ts +++ b/src/encoding/iso2022.ts @@ -114,7 +114,7 @@ export class ISO_2022_KR extends ISO_2022 { return 'ISO-2022-KR'; } language() { - return 'kr'; + return 'ko'; } escapeSequences = [[0x1b, 0x24, 0x29, 0x43]]; }