繁简体字符串转化的JAVA方式实现.doc_第1页
繁简体字符串转化的JAVA方式实现.doc_第2页
繁简体字符串转化的JAVA方式实现.doc_第3页
繁简体字符串转化的JAVA方式实现.doc_第4页
繁简体字符串转化的JAVA方式实现.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

繁简体(GBBig5)字符串转化的JAVA方式实现本文提供一个java实现中文字符繁简体互换的zip包以及主要的源代码实现说明。 繁简体(GBBig5)中文字符的转化实现原理很简单,就是根据两种码表的编码规则,创建两者之间的字符对应关系表,通过程序读取这个映射表来自动查出另一种编码方式下对应字符的字节编码,从而进行逐字节的内容替换。 主功能实现的GB2Big5.java源代码如下: 查看复制到剪切板打印1. packagenet.java2000.tools; 2. 3. importjava.io.BufferedOutputStream; 4. importjava.io.FileOutputStream; 5. importjava.io.IOException; 6. importjava.io.InputStream; 7. 8. /* 9. *用来处理GB2312/BIG5码字符互相转换的类. 10. *需要两个码表文件:gb-big5.table,/zeal/util/big5-gb.table. 11. *这两个码表可以根据具体情况补充映射不正确的码. 12. */13. publicclassGB2Big5 14. privatestaticGB2Big5pInstance=null; 15. 16. privateStrings_big5TableFile=null; 17. 18. privateStrings_gbTableFile=null; 19. 20. privatebyteb_big5Table=null; 21. 22. privatebyteb_gbTable=null; 23. 24. /*指定两个码表文件来进行初始化*/25. privateGB2Big5(StringsgbTableFile,Stringsbig5TableFile)throwsNullPointerException 26. s_big5TableFile=sbig5TableFile; 27. s_gbTableFile=sgbTableFile; 28. if(null=b_gbTable) 29. b_gbTable=getBytesFromFile(sgbTableFile); 30. 31. if(null=b_big5Table) 32. b_big5Table=getBytesFromFile(sbig5TableFile); 33. 34. if(null=b_gbTable) 35. thrownewNullPointerException(Nogbtablecanbeload); 36. 37. if(null=b_big5Table) 38. thrownewNullPointerException(Nobig5tablecanbeload); 39. 40. 41. 42. publicstaticsynchronizedGB2Big5getInstance() 43. /returngetInstance(d:gb-big5.table,d:big5-gb.table); 44. returngetInstance(/net/java2000/tools/gb-big5.table,/net/java2000/tools/big5-gb.table); 45. 46. 47. publicstaticsynchronizedGB2Big5getInstance(StringsgbTableFile,Stringsbig5TableFile) 48. if(null=pInstance) 49. try 50. pInstance=newGB2Big5(sgbTableFile,sbig5TableFile); 51. catch(Exceptione) 52. System.err.println(e.toString(); 53. pInstance=null; 54. 55. 56. returnpInstance; 57. 58. 59. /* 60. *把gbChar对应的big5字符替换掉,用来更新码表文件.一般当发现字符映射不正确的时候可以通过这个方法来校正. 61. */62. protectedsynchronizedvoidresetBig5Char(StringgbChar,Stringbig5Char)throwsException 63. byteText=newString(gbChar.getBytes(),GBK).getBytes(GBK); 64. byteTextBig5=newString(big5Char.getBytes(),BIG5).getBytes(BIG5); 65. intmax=Text.length-1; 66. inth=0; 67. intl=0; 68. intp=0; 69. intb=256; 70. for(inti=0;imax;i+) 71. h=(int)(Texti); 72. if(h0) 73. h=b+h; 74. l=(int)(Texti+1); 75. if(l0) 76. l=b+(int)(Texti+1); 77. 78. if(h=161&l=64) 79. ;/donothing 80. else 81. p=(h-160)*510+(l-1)*2; 82. b_gbTablep=TextBig5i; 83. b_gbTablep+1=TextBig5i+1; 84. 85. i+; 86. 87. 88. BufferedOutputStreampWriter=newBufferedOutputStream(newFileOutputStream(s_gbTableFile); 89. pWriter.write(b_gbTable,0,b_gbTable.length); 90. pWriter.close(); 91. 92. 93. /* 94. *把big5Char对应的gb字符替换掉,用来更新码表文件.一般当发现字符映射不正确的时候可以通过这个方法来校正. 95. */96. protectedsynchronizedvoidresetGbChar(Stringbig5Char,StringgbChar)throwsException 97. byteTextGb=newString(gbChar.getBytes(),GBK).getBytes(GBK); 98. byteText=newString(big5Char.getBytes(),BIG5).getBytes(BIG5); 99. intmax=Text.length-1; 100. inth=0; 101. intl=0; 102. intp=0; 103. intb=256; 104. for(inti=0;imax;i+) 105. h=(int)(Texti); 106. if(h0) 107. h=b+h; 108. l=(int)(Texti+1); 109. if(l0) 110. l=b+(int)(Texti+1); 111. 112. if(h=161&l=64) 113. ;/donothing 114. else 115. p=(h-160)*510+(l-1)*2; 116. b_big5Tablep=TextGbi; 117. b_big5Tablep+1=TextGbi+1; 118. 119. i+; 120. 121. 122. BufferedOutputStreampWriter=newBufferedOutputStream(newFileOutputStream(s_big5TableFile); 123. pWriter.write(b_big5Table,0,b_big5Table.length); 124. pWriter.close(); 125. 126. 127. /*把gb2312编码的字符串转化成big5码的字节流*/128. publicbytegb2big5(StringinStr)throwsException 129. if(null=inStr|inStr.length()=0) 130. return.getBytes(); 131. /return; 132. 133. byteText=newString(inStr.getBytes(),GBK).getBytes(GBK); 134. intmax=Text.length-1; 135. inth=0; 136. intl=0; 137. intp=0; 138. intb=256; 139. bytebig=newbyte2; 140. for(inti=0;imax;i+) 141. h=(int)(Texti); 142. if(h0) 143. h=b+h; 144. l=(int)(Texti+1); 145. if(l0) 146. l=b+(int)(Texti+1); 147. 148. if(h=161&l=64) 149. big0=big1=(byte)(161-b); 150. else 151. p=(h-160)*510+(l-1)*2; 152. try 153. big0=(byte)(b_gbTablep-b); 154. catch(Exceptione) 155. big0=45; 156. 157. try 158. big1=(byte)(b_gbTablep+1-b); 159. catch(Exceptione) 160. big1=45; 161. 162. 163. Texti=big0; 164. Texti+1=big1; 165. i+; 166. 167. 168. returnText; 169. /returnnewString(Text); 170. 171. 172. /*把big5码的字符串转化成gb2312码的字符串*/173. publicStringbig52gb(StringinStr)throwsException 174. if(null=inStr|inStr.length()=0) 175. return; 176. 177. byteText=newString(inStr.getBytes(),BIG5).getBytes(BIG5); 178. intmax=Text.length-1; 179. inth=0; 180. intl=0; 181. intp=0; 182. intb=256; 183. bytebig=newbyte2; 184. for(inti=0;imax;i+) 185. h=(int)(Texti); 186. if(h0) 187. h=b+h; 188. l=(int)(Texti+1); 189. if(l0) 190. l=b+(int)(Texti+1); 191. 192. if(h=161&l=161) 193. big0=(byte)(161-b); 194. big1=(byte)(64-b); 195. else 196. p=(h-160)*510+(l-1)*2; 197. try 198. big0=(byte)(b_big5Tablep-b); 199. catch(Exceptione) 200. big0=45; 201. 202. try 203. big1=(byte)(b_big5Tablep+1-b); 204. catch(Exceptione) 205. big1=45; 206. 207. 208. Texti=big0; 209. Texti+1=big1; 210. i+; 211. 212. 213. returnnewString(Text); 214. 215. 216. /*把文件读入字节数组,读取失败则返回null*/217. privatestaticbytegetBytesFromFile(StringinFileName) 218. try 219. InputStreamin=GB2Big5.class.getResourceAsStream(inFileName); 220. bytesContent=StreamConverter.toByteArray(in); 221. in.close(); 222. returnsContent; 223. /* 224. *java.io.RandomAccessFileinStream=newjava.io.RandomAccessFile(inFileName,r);bytesContent=newbyte(int) 225. *(inStream.length();inStream.read(sContent);inStream.close();returnsContent; 226. */227. catch(Exceptione) 228. e.printStackTrace(); 229. returnnull; 230. 231. 232. 233. publicstaticvoidmain(Stringargs)throwsException 234. if(args.length2) 235. System.out.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论