Project1

标题: 内码转换问题GBK(936)转Shift-JIS(932) [打印本页]

作者: wbsy8241    时间: 2013-10-2 18:10
标题: 内码转换问题GBK(936)转Shift-JIS(932)
比如 GBK(936)的"擔帍"转为Shift-JIS(932)的"日誌"

用RM读取的文件 文件是用Shift-JIS(932)做的 所以打开是乱码
我需要在RM里再转成正常文字
作者: tseyik    时间: 2013-10-2 18:20
RM读取的文件是用unicode的
不是GBK(936)或Shift-JIS(932)
作者: wbsy8241    时间: 2013-10-2 19:20
本帖最后由 wbsy8241 于 2013-10-2 19:27 编辑
tseyik 发表于 2013-10-2 18:20
RM读取的文件是用unicode的
不是GBK(936)或Shift-JIS(932)


我不太懂这个
但我读到的"擔帍"
怎么转为"日誌"

读到的方法
1.open文件
2.unpack成16进制(不转为16进制读不全)
3.选取文本处16进制pack回来
4.转为unicode编码

由于在文件里是乱码 所以读到的也是乱码
作者: LBQ    时间: 2013-10-2 22:38
自己转码不行吗,我记得文本编辑应该可以保存成不同编码的
作者: LBQ    时间: 2013-10-2 22:49
这个我就不懂了=。=
不过这个貌似有点用。。。?
  1. "Hi there".force_encoding 'utf-8'
复制代码

作者: Sion    时间: 2013-10-9 15:51
本帖最后由 Sion 于 2014-1-13 23:34 编辑

RUBY 代码复制
  1. class String# 转码--
  2.   MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  3.   WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  4.   CP_JIS  = 932
  5.   CP_UTF8 = 65001
  6.   def j2u
  7.     w2m(CP_UTF8, m2w(CP_JIS, self)).chop
  8.   end
  9.   # -
  10.   def m2w(cpi, buf)
  11.     nLen = MultiByteToWideChar.call(cpi, 0, buf, -1, nil, 0) * 2
  12.     wBuf = "\0" * nLen
  13.     MultiByteToWideChar.call(cpi, 0, buf, -1, wBuf, nLen)
  14.     return wBuf
  15.   end
  16.   def w2m(cpi, buf)
  17.     nLen = WideCharToMultiByte.call(cpi, 0, buf, -1, nil, 0, nil, nil) * 2
  18.     wBuf = "\0" * nLen
  19.     WideCharToMultiByte.call(cpi, 0, buf, -1, wBuf, nLen, nil, nil)
  20.     return wBuf
  21.   end
  22. end

读取Shift-JIS编码的文件:
RUBY 代码复制
  1. str = File.open(filename).read
  2. p str.j2u





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1