iconv_test.lua 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. --[[
  2. @module iconv_test
  3. @summary 字符编码转换测试模块
  4. @version 1.0
  5. @date 2025.10.27
  6. @author 孟伟
  7. @usage
  8. 本模块提供多种字符编码之间的相互转换功能,支持以下编码转换:
  9. 1. Unicode小端(ucs2)与GB2312编码互转
  10. 2. Unicode大端(ucs2be)与GB2312编码互转
  11. 3. Unicode小端(ucs2)与UTF8编码互转
  12. 4. Unicode大端(ucs2be)与UTF8编码互转
  13. 5. GB2312 编码与 UTF-8 编码之间的转换。
  14. 本文件没有对外接口,直接在main.lua中require "iconv_test"就可以加载运行;
  15. ]]
  16. --- unicode小端编码 转化为 gb2312编码
  17. -- @string ucs2s unicode小端编码数据
  18. -- @return string data,gb2312编码数据
  19. -- @usage local data = common.ucs2ToGb2312(ucs2s)
  20. function ucs2ToGb2312(ucs2s)
  21. local cd = iconv.open("gb2312", "ucs2")
  22. return cd:iconv(ucs2s)
  23. end
  24. --- gb2312编码 转化为 unicode小端编码
  25. -- @string gb2312s gb2312编码数据
  26. -- @return string data,unicode小端编码数据
  27. -- @usage local data = common.gb2312ToUcs2(gb2312s)
  28. function gb2312ToUcs2(gb2312s)
  29. local cd = iconv.open("ucs2", "gb2312")
  30. return cd:iconv(gb2312s)
  31. end
  32. --- unicode大端编码 转化为 gb2312编码
  33. -- @string ucs2s unicode大端编码数据
  34. -- @return string data,gb2312编码数据
  35. -- @usage data = common.ucs2beToGb2312(ucs2s)
  36. function ucs2beToGb2312(ucs2s)
  37. local cd = iconv.open("gb2312", "ucs2be")
  38. return cd:iconv(ucs2s)
  39. end
  40. --- gb2312编码 转化为 unicode大端编码
  41. -- @string gb2312s gb2312编码数据
  42. -- @return string data,unicode大端编码数据
  43. -- @usage local data = common.gb2312ToUcs2be(gb2312s)
  44. function gb2312ToUcs2be(gb2312s)
  45. local cd = iconv.open("ucs2be", "gb2312")
  46. return cd:iconv(gb2312s)
  47. end
  48. --- unicode小端编码 转化为 utf8编码
  49. -- @string ucs2s unicode小端编码数据
  50. -- @return string data,utf8编码数据
  51. -- @usage data = common.ucs2ToUtf8(ucs2s)
  52. function ucs2ToUtf8(ucs2s)
  53. local cd = iconv.open("utf8", "ucs2")
  54. return cd:iconv(ucs2s)
  55. end
  56. --- utf8编码 转化为 unicode小端编码
  57. -- @string utf8s utf8编码数据
  58. -- @return string data,unicode小端编码数据
  59. -- @usage local data = common.utf8ToUcs2(utf8s)
  60. function utf8ToUcs2(utf8s)
  61. local cd = iconv.open("ucs2", "utf8")
  62. return cd:iconv(utf8s)
  63. end
  64. --- unicode大端编码 转化为 utf8编码
  65. -- @string ucs2s unicode大端编码数据
  66. -- @return string data,utf8编码数据
  67. -- @usage data = common.ucs2beToUtf8(ucs2s)
  68. function ucs2beToUtf8(ucs2s)
  69. local cd = iconv.open("utf8", "ucs2be")
  70. return cd:iconv(ucs2s)
  71. end
  72. --- utf8编码 转化为 unicode大端编码
  73. -- @string utf8s utf8编码数据
  74. -- @return string data,unicode大端编码数据
  75. -- @usage local data = common.utf8ToUcs2be(utf8s)
  76. function utf8ToUcs2be(utf8s)
  77. local cd = iconv.open("ucs2be", "utf8")
  78. return cd:iconv(utf8s)
  79. end
  80. --- utf8编码 转化为 gb2312编码
  81. -- @string utf8s utf8编码数据
  82. -- @return string data,gb2312编码数据
  83. -- @usage local data = common.utf8ToGb2312(utf8s)
  84. function utf8ToGb2312(utf8s)
  85. local cd = iconv.open("ucs2", "utf8")
  86. local ucs2s = cd:iconv(utf8s)
  87. cd = iconv.open("gb2312", "ucs2")
  88. return cd:iconv(ucs2s)
  89. end
  90. --- gb2312编码 转化为 utf8编码
  91. -- @string gb2312s gb2312编码数据
  92. -- @return string data,utf8编码数据
  93. -- @usage local data = common.gb2312ToUtf8(gb2312s)
  94. function gb2312ToUtf8(gb2312s)
  95. local cd = iconv.open("ucs2", "gb2312")
  96. local ucs2s = cd:iconv(gb2312s)
  97. cd = iconv.open("utf8", "ucs2")
  98. return cd:iconv(ucs2s)
  99. end
  100. --------------------------------------------------------------------------------------------------------
  101. --[[
  102. 函数名:ucs2ToGb2312
  103. 功能 :unicode小端编码 转化为 gb2312编码,并打印出gb2312编码数据
  104. 参数 :
  105. ucs2s:unicode小端编码数据,注意输入参数的字节数
  106. 返回值:
  107. ]]
  108. local function testucs2ToGb2312(ucs2s)
  109. print("ucs2ToGb2312")
  110. local gb2312num = ucs2ToGb2312(ucs2s) --调用的是common.ucs2ToGb2312,返回的是编码所对应的字符串
  111. --print("gb2312 code:",gb2312num)
  112. print("gb2312 code:", string.toHex(gb2312num))
  113. end
  114. --[[
  115. 函数名:gb2312ToUcs2
  116. 功能 :gb2312编码 转化为 unicode十六进制小端编码数据并打印
  117. 参数 :
  118. gb2312s:gb2312编码数据,注意输入参数的字节数
  119. 返回值:
  120. ]]
  121. local function testgb2312ToUcs2(gb2312s)
  122. print("gb2312ToUcs2")
  123. local ucs2num = gb2312ToUcs2(gb2312s)
  124. print("unicode little-endian code:" .. string.toHex(ucs2num)) -- 要将二进制转换为十六进制,否则无法输出
  125. end
  126. --[[
  127. 函数名:ucs2beToGb2312
  128. 功能 :unicode大端编码 转化为 gb2312编码,并打印出gb2312编码数据,
  129. 大端编码数据是与小端编码数据位置调换
  130. 参数 :
  131. ucs2s:unicode大端编码数据,注意输入参数的字节数
  132. 返回值:
  133. ]]
  134. local function testucs2beToGb2312(ucs2s)
  135. print("ucs2beToGb2312")
  136. local gb2312num = ucs2beToGb2312(ucs2s) -- 转化后的数据直接变成字符可以直接输出
  137. print("gb2312 code :" .. string.toHex(gb2312num))
  138. end
  139. --[[
  140. 函数名:gb2312ToUcs2be
  141. 功能 :gb2312编码 转化为 unicode大端编码,并打印出unicode大端编码
  142. 参数 :
  143. gb2312s:gb2312编码数据,注意输入参数的字节数
  144. 返回值:unicode大端编码数据
  145. ]]
  146. function testgb2312ToUcs2be(gb2312s)
  147. print("gb2312ToUcs2be")
  148. local ucs2benum = gb2312ToUcs2be(gb2312s)
  149. print("unicode big-endian code :" .. string.toHex(ucs2benum))
  150. end
  151. --[[
  152. 函数名:ucs2ToUtf8
  153. 功能 :unicode小端编码 转化为 utf8编码,并打印出utf8十六进制编码数据
  154. 参数 :
  155. ucs2s:unicode小端编码数据,注意输入参数的字节数
  156. 返回值:
  157. ]]
  158. local function testucs2ToUtf8(ucs2s)
  159. print("ucs2ToUtf8")
  160. local utf8num = ucs2ToUtf8(ucs2s)
  161. print("utf8 code:" .. string.toHex(utf8num))
  162. end
  163. --[[
  164. 函数名:utf8ToGb2312
  165. 功能 :utf8编码 转化为 gb2312编码,并打印出gb2312编码数据
  166. 参数 :
  167. utf8s:utf8编码数据,注意输入参数的字节数
  168. 返回值:
  169. ]]
  170. local function testutf8ToGb2312(utf8s)
  171. print("utf8ToGb2312")
  172. local gb2312num = utf8ToGb2312(utf8s)
  173. print("gb2312 code:" .. string.toHex(gb2312num))
  174. end
  175. --[[
  176. 函数名:gb2312ToUtf8
  177. 功能 :gb2312编码 转化为 utf8编码,并打印出utf8编码数据
  178. 参数 :
  179. gb2312s:gb2312s编码数据,注意输入参数的字节数
  180. 返回值:
  181. ]]
  182. local function testgb2312ToUtf8(gb2312s)
  183. print("gb2312ToUtf8")
  184. local utf8s = gb2312ToUtf8(gb2312s)
  185. print("utf8s code:" .. utf8s)
  186. end
  187. function iconv_test_fun()
  188. while 1 do
  189. sys.wait(10000)
  190. testucs2ToGb2312(string.fromHex("1162")) -- "1162"是"我"字的ucs2编码,这里调用了string.fromHex将参数转化为二进制,也就是两个字节。
  191. testgb2312ToUcs2(string.fromHex("CED2")) -- "CED2"是"我"字的gb2312编码
  192. testucs2beToGb2312(string.fromHex("6211")) -- "6211"是"我"字的ucs2be编码
  193. testgb2312ToUcs2be(string.fromHex("CED2"))
  194. testucs2ToUtf8(string.fromHex("1162"))
  195. testutf8ToGb2312(string.fromHex("E68891")) -- "E68891"是"我"字的utf8编码
  196. testgb2312ToUtf8(string.fromHex("CED2"))
  197. end
  198. end
  199. sys.taskInit(iconv_test_fun)