[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 15# wskwfkbdn


    如果取样素材及其有限,我想一些主流文本编辑器也只能选择显示16进制码。用户得自己选择采用哪种编码浏览

TOP

回复 16# 523066680

前面gbk,utf8,测试识别还是准确的,识别unicode编码也就不难了,如果先进程编码转换 unicode转gbk编码,以gbk方法识别正确则认定是unicode编码
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

utf16-be utf16-le
其中有一些把字节反过来可以成为另一种编码解读的对应字符,列出一些常见字符的部分
  1. 0034 - 4,  3400 - 㐀
  2. 0035 - 5,  3500 - 㔀
  3. 0036 - 6,  3600 - 㘀
  4. 0037 - 7,  3700 - 㜀
  5. 0038 - 8,  3800 - 㠀
  6. 0039 - 9,  3900 - 㤀
  7. 003A - :,  3A00 - 㨀
  8. 003B - ;,  3B00 - 㬀
  9. 003C - <,  3C00 - 㰀
  10. 003D - =,  3D00 - 㴀
  11. 003E - >,  3E00 - 㸀
  12. 003F - ?,  3F00 - 㼀
  13. 0040 - @,  4000 - 䀀
  14. 0041 - A,  4100 - 䄀
  15. 0042 - B,  4200 - 䈀
  16. 0043 - C,  4300 - 䌀
  17. 0044 - D,  4400 - 䐀
  18. 0045 - E,  4500 - 䔀
  19. 0046 - F,  4600 - 䘀
  20. 0047 - G,  4700 - 䜀
  21. 0048 - H,  4800 - 䠀
  22. 0049 - I,  4900 - 䤀
  23. 004A - J,  4A00 - 䨀
  24. 004B - K,  4B00 - 䬀
  25. 004C - L,  4C00 - 䰀
  26. 004D - M,  4D00 - 䴀
  27. 004E - N,  4E00 - 一
  28. 004F - O,  4F00 - 伀
  29. 0050 - P,  5000 - 倀
  30. 0051 - Q,  5100 - 儀
  31. 0052 - R,  5200 - 刀
  32. 0053 - S,  5300 - 匀
  33. 0054 - T,  5400 - 吀
  34. 0055 - U,  5500 - 唀
  35. 0056 - V,  5600 - 嘀
  36. 0057 - W,  5700 - 圀
  37. 0058 - X,  5800 - 堀
  38. 0059 - Y,  5900 - 夀
  39. 005A - Z,  5A00 - 娀
  40. 005B - [,  5B00 - 嬀
  41. 005C - \,  5C00 - 尀
  42. 005D - ],  5D00 - 崀
  43. 005E - ^,  5E00 - 帀
  44. 005F - _,  5F00 - 开
  45. 0060 - `,  6000 - 怀
  46. 0061 - a,  6100 - 愀
  47. 0062 - b,  6200 - 戀
  48. 0063 - c,  6300 - 挀
  49. 0064 - d,  6400 - 搀
  50. 0065 - e,  6500 - 攀
  51. 0066 - f,  6600 - 昀
  52. 0067 - g,  6700 - 最
  53. 0068 - h,  6800 - 栀
  54. 0069 - i,  6900 - 椀
  55. 006A - j,  6A00 - 樀
  56. 006B - k,  6B00 - 欀
  57. 006C - l,  6C00 - 氀
  58. 006D - m,  6D00 - 洀
  59. 006E - n,  6E00 - 渀
  60. 006F - o,  6F00 - 漀
  61. 0070 - p,  7000 - 瀀
  62. 0071 - q,  7100 - 焀
  63. 0072 - r,  7200 - 爀
  64. 0073 - s,  7300 - 猀
  65. 0074 - t,  7400 - 琀
  66. 0075 - u,  7500 - 甀
  67. 0076 - v,  7600 - 瘀
  68. 0077 - w,  7700 - 眀
  69. 0078 - x,  7800 - 砀
  70. 0079 - y,  7900 - 礀
  71. 007A - z,  7A00 - 稀
  72. 007B - {,  7B00 - 笀
  73. 007C - |,  7C00 - 簀
  74. 007D - },  7D00 - 紀
复制代码
[attach]10209[/attach] 附件

附件用sublime text打开,默认显示16进制码,可以手动用utf-16le格式查看,也可以用utf-16be格式查看,文字显示是反过来的

不过好在 000d 和 000a 就没有这个调换字节后相当于另一个常见字符的问题,而且本身比较常见,无BOM的情况下,我觉得以此为判断已经是比较好的办法。

TOP

本帖最后由 523066680 于 2016-10-24 20:16 编辑

再来一点,同样的字节值,可以按不同编码解读为不同的汉字/偏僻字
  1. gbk:
  2. 鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁
  3. utf16-le:
  4. 䃹䇹䋹䏹䓹䗹䛹䟹䣹䧹䫹䯹䳹仹俹價凹勹叹哹嗹囹培壹姹嫹对峹巹廹忹惹懹拹揹擹旹曹柹棹槹櫹毹泹淹滹濹烹燹狹珹瓹痹盹矹磹秹竹篹糹緹绹
  5. utf16-be:
  6. 鹿論壟弄籠聾牢磊賂雷壘屢樓漏累縷陋勒肋凜凌稜綾菱陵讀拏樂諾丹寧怒率異北磻便復不泌數索參塞省葉說殺辰沈拾若掠略亮兩凉梁糧良諒量
  7. big5:
  8. 纘纛纙臠臡虆虇虈襹襺襼襻觿讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊
复制代码

TOP

回复 19# 523066680

真的好吗?这方法我实验过,效率慢且不同编码有些字符集是相同的,会误判。
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

本帖最后由 523066680 于 2016-10-24 21:27 编辑

回复 20# wskwfkbdn

    ?我没有提供哪个方法,是觉得楼主以00 0d 或者 0d 00作为辨别是还可以的方案啊。
(就是说即使这个方法效率低,好吧,那不是我提出来的

然后从17楼看感觉可能频道不对,前面讨论 LE 和 BE 的辨别,为何涉及到GBK ?
前面gbk,utf8,测试识别还是准确的,识别unicode编码也就不难了,如果先进程编码转换 unicode转gbk编码,以gbk方法识别正确则认定是unicode编码


假设上面是在说LE 和 BE的辨别,我觉得,如果以转GBK再转unicode对比作为辨别,会有两个问题:
1. GBK的范围没有 UTF 这么广泛
2. 有些数据,既可以按大端序解读为Unicode再转GBK,也可以按小端序解读为Unicode再转GBK,他们看上去都是正常的字符或者汉字,这个时候怎么辨别LE 还是 BE?
  1. use Encode;
  2. binmode(STDOUT, ":encoding(gbk)");  #输出时统一转为gbk
  3. print  decode('gbk', "\xf9\x7a");
  4. print  decode('utf16-le', "\xf9\x7a");
  5. print  decode('utf16-be', "\xf9\x7a");
复制代码
输出
鵽竹梁

TOP

本帖最后由 wskwfkbdn 于 2016-10-24 21:49 编辑

回复 21# 523066680

编码检测工具下载:图片另存为,改rar解压

判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

本帖最后由 523066680 于 2016-10-24 22:24 编辑

回复 22# wskwfkbdn

所以…… 这个工具是你写的,在LE 和 BE这件事情上,识别效率和准确率比通过 00 0d , d0 00; 00 0a / 0a 00辨别更高??

TOP

回复 23# 523066680

对,忽略bom头识别,
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

回复 24# wskwfkbdn


神器1:http://www.bathome.net/s/tool/index.html?key=enca
神器2:http://www.bathome.net/s/tool/index.html?key=file

或 mshta:
  1. mshta http://bathome.net/s/hta/?string "t=iconv.load('a.html');list.charset().where(function(c){return iconv.toStr(t,c)})"|more
复制代码
http://www.bathome.net/viewthread.php?tid=39824

TOP

先赞一个吧
判定一个人是否为伸手党的标准是取决于他的态度和诚意。

TOP

本帖最后由 523066680 于 2016-10-25 09:48 编辑

Perl和Python都是有直接的库可以检测,已经被脚本语言惯坏了,所以重看楼主C代码的时候觉得,良心制作。

不过,考虑到传入的文件名符号可能是Unicode的(比如拖放到终端),可以试试用 _tmain 或者 wmain
用了之后有些输入输出函数、参数要跟着加前缀

TOP

本帖最后由 CrLf 于 2016-10-26 02:45 编辑

如果不考虑复杂度的话,该算法还可优化,例如:
AAAAAAAABBBBBBBBCDEBBBBBBBBCCCCAAAAAAAAAAAA

用顶楼算法得到的结果是:
#  BBBBBBBB  CDE  BBBBBBBB  CCCC  #-

进一步压缩得到的结果是(规则参考附文):
#  >B#  CDE  #  >C-  <#-
规则是在重复字符发生变化的节点前声明此后的重复字符,如多个重复字符串比邻,则仅需声明一次:
>B 此后的所有 @ - # $ _ } { ] [ 均表示特定个数的 B
>C 同上,表示特定个数的 C
<  同上,表示特定个数的 A(默认)
接下来可以再考虑如何处理重复的词

TOP

返回列表