注册
登录
论坛
搜索
帮助
导航
私人消息 (0)
公共消息 (0)
论坛任务 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
批处理之家
»
BAT求助&讨论
» Windows 代码页与字符顺序
[新手上路]
批处理新手入门导读
[视频教程]
批处理基础视频教程
[视频教程]
VBS基础视频教程
[批处理精品]
批处理版照片整理器
[批处理精品]
纯批处理备份&还原驱动
[批处理精品]
CMD命令50条不能说的秘密
[在线下载]
第三方命令行工具
[在线帮助]
VBScript / JScript 在线参考
返回列表
发帖
hanyeguxing
发短消息
加为好友
hanyeguxing
(寒夜孤星)
当前离线
UID
14295
帖子
1739
精华
1
积分
4955
PB
4180
技术
255
捐助
0
阅读权限
254
来自
在地狱中仰望天堂
在线时间
1094 小时
注册时间
2009-6-11
最后登录
2012-5-31
荣誉版主
帖子
1739
积分
4955
技术
255
捐助
0
注册时间
2009-6-11
1
楼
跳转到
»
倒序看帖
打印
字体大小:
t
T
发表于 2011-5-16 15:56
|
显示全部帖子
[系统相关]
Windows 代码页与字符顺序
本帖最后由 hanyeguxing 于 2011-5-17 10:08 编辑
声明:以下内容为梦游时写的。。。。。
系统下有一类重要的文件类型被我们忽略:.nls 文件,多国语言资源文件、字符转换;本地语言服务驱动(字体或字体映射) ,编码:UNICODE 。
在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Code page)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。
1,代码页:
一种为不同国家(地区)字符集和键盘布局提供支持的方法。代码页是一个表格,它将程序使用的二进制字符代码与键盘上的键或屏幕上显示的字符关联起来。分为单字节代码页(例如 1252 ANSI-拉丁文 I);多字节代码页(例如 936 ANSI/OEM-简体中文 GBK);多字节代码页(例如 54936 GB18030 简体中文)等等。
c_系列 代码页转换表:c_037.nls c_10000.nls c_10001.nls c_10002.nls c_10003.nls c_10006.nls c_10007.nls c_10008.nls c_10010.nls c_10017.nls c_10029.nls c_10079.nls c_10081.nls c_10082.nls c_1026.nls c_1250.nls c_1251.nls c_1252.nls c_1253.nls c_1254.nls c_1255.nls c_1256.nls c_1257.nls c_1258.nls c_1361.nls c_20000.nls c_20127.nls c_20261.nls c_20290.nls c_20866.nls c_20905.nls c_20932.nls c_20936.nls c_20949.nls c_21027.nls c_21866.nls c_28591.nls c_28592.nls c_28593.nls C_28594.NLS C_28595.NLS C_28597.NLS c_28598.nls c_28599.nls c_28603.nls c_28605.nls c_437.nls c_500.nls c_737.nls c_775.nls c_850.nls c_852.nls c_855.nls c_857.nls c_860.nls c_861.nls c_863.nls c_865.nls c_866.nls c_869.nls c_874.nls c_875.nls c_932.nls c_936.nls c_949.nls c_950.nls
还有 geo.nls、big5.nls、ksc.nls、xjis.nls、ctype.nls、unicode.nls、sorttbls.nls 等等。下面,我们介绍几个关键的 .nls 文件:
2,区域设置:
locale.nls:区域表
编码:UNICODE
位置:C:\WINDOWS\system32
可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式。
3,字符顺序:
prcp.nls:汉字拼音顺序映射表
编码:UNICODE
位置:C:\WINDOWS\system32
序号从 80 02 开始,汉字为“吖”,到 D3 E3 结束,汉字为“咗”
prc.nls:汉字部首顺序映射表
编码:UNICODE
位置:C:\WINDOWS\system32
序号从 80 02 开始,汉字为“一”,到 D3 E3 结束,汉字为“龘”
bopomofo.nls:汉字注音顺序映射表
编码:UNICODE
位置:C:\WINDOWS\system32
序号从 80 02 开始,汉字为“ㄅ”,到 D0 DE 结束,汉字为“醟”
这三个文件里存储的是汉字常用的三个顺序。寒夜孤星提示大家注意,这里说的是汉字,而非中文字符。我们把中文字符分成两大类,即符号和汉字,例如 ⑺ 这是一个中文符号而非汉字,而 ㈦ 是汉字非中文符号,所以 ⑺ 这个字符是不存储在这些中文汉字顺序中的。
默认,系统是按照汉字拼音顺序排列的,所以“寒”是排在“夜”前面的。如果我们想要更改这个顺序,可以修改 prcp.nls 文件中的对应汉字,例如将他们两个调换一下位置,那么重新启动系统后,无论在命令行中,还是在图形界面下,这个顺序都将发生改变。当然,如果想把系统默认的拼音顺序该为部首顺序或注音顺序,只要将这些文件的文件名对调也可以。
寒夜孤星提示:这么重要的文件,系统是会保护的,所以 dllcache 目录下是有他们的备份的哦,其他 .nls 也是如此!~
sortkey.nls:顺序映射表
编码:UNICODE
位置:C:\WINDOWS\system32
此文件记录字符的顺序排列,并且记录的是序号。
⒈字符的顺序按照符号、数字、字母、汉字、罕见符号的顺序排列。
⒉汉字部分默认按拼音排列。
⒊中文类符号则按其功能插入到相应的分类中并放到对应英文符号的后面。
⒋中文符号 〇 位于所有可打印字符最前。
例如句号 。 插入到符号类中并位于英文句号点 . 的后面; 5 ⑤ ⒌ 这三个字符插入到数字类并放到数字 5 的后面
在 cmd.exe 中命令分为两大类:
第一类如 if 、sort 等,按以上顺序排列字符;其他 32 位程序绝大多数也是如此,例如资源管理器、外壳程序等等。
第二类如 set 、dir 、for 等,按 UNICODE 编码顺序排列,不使用 sortkey.nls 顺序。
注:由于篇幅原因就不展开 if 比较时 〇 - 大小写等的特例说明。
2
评分人数
qzwqzw:
捅破的不止一层纸
技术 + 1
plp626:
精品,但不是谁懂得欣赏
技术 + 1
收藏
分享
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)
hanyeguxing
发短消息
加为好友
hanyeguxing
(寒夜孤星)
当前离线
UID
14295
帖子
1739
精华
1
积分
4955
PB
4180
技术
255
捐助
0
阅读权限
254
来自
在地狱中仰望天堂
在线时间
1094 小时
注册时间
2009-6-11
最后登录
2012-5-31
荣誉版主
帖子
1739
积分
4955
技术
255
捐助
0
注册时间
2009-6-11
2
楼
发表于 2011-5-17 11:19
|
显示全部帖子
本帖最后由 hanyeguxing 于 2011-5-17 12:06 编辑
5#
qzwqzw
1,那是俺唯一一句引用了微软的话:ms-its:C:\WINDOWS\Help\glossary.chm::/glossary_pro.htm#gls_code_page
2,所有的.nls数据文件本身也可以是一个提供转换函数的动态链接库。
3,prcp.nls和prc.nls这些转换表特殊在于即使被删除,也不影响字符的各种使用,仅影响顺序而已,所以单独列出来。
4,sorttbls.nls只定义相关转换表之间的关系,他并不具体定义某两个字符之间谁先谁后。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)
TOP
返回列表
批处理专区: BAT CMD DOS
BAT求助&讨论
BAT教程&资料
BAT原创&转载
BAT新大陆
BAT转载代码
新手练功
出题挑战
有偿求助
第三方命令行
开源原创工具
iBAT
Take Command
其他脚本区
PowerShell求助&讨论
PowerShell教程&资料
PowerShell原创&转载
VBS求助&讨论
JS / JScript / JavaScript
VBS教程&资料
VBS原创&转载
UNIX/Linux Shell
Python
Perl
网络资源区
电脑技术研讨
精品软件交流
论坛事务区
站务交流
意见反馈
论坛公告
版主申请
交换链接
建站杂谈
活动专区
论坛总版规
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]