爱问知识人 爱问教育 医院库

求ASCII编码(简称A码)和Unicode(简称U码)的区别?

首页

求ASCII编码(简称A码)和Unicode(简称U码)的区别?

求ASCII编码(简称A码)和Unicode(简称U码)的区别?

提交回答

全部答案

    2018-05-21 04:35:44
  •   大家都知道U码的软件的字符串用十六进制打开会用一个一个小点"。"来分开显示的!比如U码软件的About这个单词的字符串用十六进制打开会以"。A。b。o。u。t。"这样的形式分开,而A码的软件的字符串是没有"。"来分开的,比如A码软件的单词About用十六进制打开会直接显示About,U码的字符不论是英文还是中文都是一个字符占用两个字节,比如U码软件的字母A的十六进制码是4100(41是一个字节,00又是一个字节)~而A码软件的字母只需要一个字符占用一个字节,比如A码软件的字母A的十六进制码是41,大家对比一下就清楚了。
      

    比如要汉化About这个单词,十六进制打开,按选项-查找-ASCII-输入“About”,会找到一个结果,看看About的字符串41626F757417前面还有两个字节是0505,这两个字节"0505"是About的A码的指数,其作用是用来指示字串的长度及字符数的,是16进制的计数方式,前面一个05代表这个字串有5个字符(简单点来说就是有五个字母),后面的05代表这个字串是由5个字节构成(A码一个汉字和字母都占一个字节,U码字母占一个字节,汉字占两个字节)。
      
    对于英文字符来说,有效字符和字串长度是一样的,但要汉化成中文就不同了,我们必须用中文的Unicode字符去替换,因为只有Unicode字符才能正常显示中文。但是我们不能直接替换成“关于”这两个字符的U码代码,中文编码的使用是需要加上标识符的,这个标识符是以0F开头(表示以下内容为Unicode编码),以E0结尾(E0表示以后为ASCII编码),其实只要有0F就行了,不过有时你剩下一字节你如果用U码就不够了,这时就要用E0来代替。
      ~比如将"About"的A码的字符串"050541626F757417"要改为中文的U码的"关于"的字符串就是"02050F51734E8E"(其实我汉化A码一般都是先将指数后面的字符串修改成中文的代码,然后再根据修改后的代码而修改指数),这个字符串中:02表示有两个有效字符(即两个汉字),05表示仍然占用五个字节,0F表示以下的字节为U码,5173是“关”字的U码的代码(小端字节序,简单说要将两个字节反过来,你查到的“关”的Unicode代码是7351,这就要反过来),4E8E是“于”字的U码代码(小端字节序,记得要将两个字节倒转),这样保存后覆盖原原文件即可实现汉化!
    再举个例子,让大家更加能活学活用0F和E0与指数的变化。
      现在我们需要英文Visualizer,找到它的A码字符串代码是"0A0A56697375616C697A6572",这个字符串的指数是0A0A,代表了这个字符串有十个有效字符和占用十个字节(在十六进制里指数所代表的字节数目只用0~9和A~F这十六个字符代表。
      也就是说指数的十六进制码的01~09代表数字1~9,而0A~0F则代表数字10~15,10则代表数字16,如此类推,1A代表数字26,也就是说如果该字符串占用26个字节,那么指数的代码就是1A),要汉化这个英文为“界面”(其U码的代码为4C756297)可以用很多方法,比如修为"060A0F754C9762E020202020",
    其中第一个06代表有效字符串有6个:即两个文字的U码代码(记得小端字节序是要倒过来的)=0F75和9762,四个空格的A码代码=20202020(因为如果只汉化成两个中文,后面剩余的代码则应以空格的代码填充,而这四个字节前面的E0已经表示后面的是A码代码,所以必须是20而不是2000的小端字序代码0020),而第二个0A则表示这组字符串占用十个字节,大家可以算一算,0F754C9762E020202020这几个代码刚好占用十个字节(请分清楚0F和E0这两个代码也是占用字节的)!但是汉化此类字符串也不是一成不变的,大家一定要活学活用懂得在不同的字符串到底要怎么样写才能更加加适合,你可以将上面汉化的代码写成这样"040A0F754C976200200020E0"或者"050A0F754C97620020E02020"甚至是"060A0E202020200F754C9762""(这个得考虑一下前面的四个空格对汉化后对中文的位置影响)等等,总之不是一成不变的,要写成合适的!然后保存后文件即可实现汉化。
      
    接下来要说的就是A码汉化常常涉及的字符串的转移教程。我们知道要汉化A码的代码必须要转化为U码代码,但是如果碰上一些英文比较短的字符串(如Ok)怎么办?如果直接替代为U码代码,肯定不够字节数,那怎么办呢?那就要借了,也就是向字节数多的字符串借!举例,汉化软件里的Play这个英文,找到Play的A码字符串代码为"0404506C6179",如果想汉化成"播放"(这两个中文的U码的十六进制码是AD64和3E65)这两个中文,直接用U码字符串替代明显是不行的,因为Play只有四个有效字节,而"播放"的U码却占了四个字节,加上U码标识符一共就五个字节了,总不能将Play只汉化成一个“播”字吧?这时我们就需要向汉化附近的字符串时有多余的字节的字符串借了!我们从Play的字符串向上找找不到有多余的字符串,于是向下找,到位置150这里,看看当时原英文将Visualizer汉化成“界面”这个词的字符串,很明显,Visualizer的十个字节汉化成“界面”这个词只需五个字节即可完成(两个U码字符占用四个字节,还有一个字节是0F的U码标识符),剩下的五个字节符用空格和E0来填补太浪费了吧?我们现在需要的就是多出的五个字节了,从Play的字符串开始(尽量记下字符串的位置,这里是121)到已经汉化成"界面"的字符串结束(位置是162),我们得到的代码是""0404506C6179170000FFFFFFFF000000000600000009F0F60800000000040A0F754C972600200020E0",这段代码分三组,第一组“0404506C6179”是Play的A码字符串~第二组“170000FFFFFFFF000000000600000009F0F60800000000”是系统的代码你不能修改,否则会打不开软件~第三组“040A0F754C972600200020E0”是已经汉化成"界面"的字符串,第一组不够用第三组却多了就得问第三组借几个字节,但是手机又不能将字节直接剪切到相对应的位置,那么我们就需要通过移动字节的位置来达到剪切的目的,只要将以上那段字符串修改为"02050F64AD653E170000FFFFFFFF000000000600000009F0F6080000000004090F754C972600200020"即可,这样的移动代码即可以让第一组向第三组“借”到了一个字节,记得要将指数修改为相对应的有效字符数和占用字节数喔!只要你掌握得好,指数和字节都没写错,那些字节就可以让你随心所欲地移动了,但是记得不要修改系统代码喔!有时可能会涉及移动几组的代码才能汉化,大家要善于运用。
      
    汉化A码的工作真的很烦琐,建议大家用十六进制打开字符文件后,从上至下慢慢一个一个地汉化,记得要多还少补~对了,还有一种无最大长度的字符串,比如“Stopping”是“0853544F5050494E47”~换成中文的Unicode的“停止”是“080F505C6B620020E0”即可汉化!。
      

    跳***

    2018-05-21 04:35:44

类似问题

换一换
  • 其他编程语言 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 171-190
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):