查看: 3352|回复: 5

[已经解决] 内码转换问题GBK(936)转Shift-JIS(932)

[复制链接]
梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
发表于 2013-10-2 18:10:48 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
比如 GBK(936)的"擔帍"转为Shift-JIS(932)的"日誌"

用RM读取的文件 文件是用Shift-JIS(932)做的 所以打开是乱码
我需要在RM里再转成正常文字
梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2013-10-2 18:20:22 | 显示全部楼层
RM读取的文件是用unicode的
不是GBK(936)或Shift-JIS(932)
回复

使用道具 举报

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
回帖
550
 楼主| 发表于 2013-10-2 19:20:14 | 显示全部楼层
本帖最后由 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编码

由于在文件里是乱码 所以读到的也是乱码
回复

使用道具 举报

唯一的信徒

梦石
0
星屑
1697
在线时间
1359 小时
注册时间
2013-1-29
回帖
1537
发表于 2013-10-2 22:38:03 | 显示全部楼层
自己转码不行吗,我记得文本编辑应该可以保存成不同编码的

点评

而且不是保存成不同编码就可以解决的.  发表于 2013-10-2 22:44
我要把得到的文本再写入另一个文件里,手动我会转  发表于 2013-10-2 22:43
『我只是一个正在潜心修炼的渣乐师罢了』
Dear Time\(^o^)/~


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime
回复

使用道具 举报

唯一的信徒

梦石
0
星屑
1697
在线时间
1359 小时
注册时间
2013-1-29
回帖
1537
发表于 2013-10-2 22:49:45 | 显示全部楼层
这个我就不懂了=。=
不过这个貌似有点用。。。?
  1. "Hi there".force_encoding 'utf-8'
复制代码

点评

LBQ
↓ 那么我无能为力了=。=,也许这里能帮助阁下:http://nuclearsquid.com/writings/ruby-1-9-encodings/  发表于 2013-10-2 23:13
没用  发表于 2013-10-2 22:55
『我只是一个正在潜心修炼的渣乐师罢了』
Dear Time\(^o^)/~


假如上面的图片挂了的话麻烦各位去发个帖 @ 一下 orzFly 让他修复 deartime
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2013-10-9 15:51:59 | 显示全部楼层
本帖最后由 Sion 于 2014-1-13 23:34 编辑

[pre lang="ruby" line="1"]class String# 转码--
  MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  CP_JIS  = 932
  CP_UTF8 = 65001
  def j2u
    w2m(CP_UTF8, m2w(CP_JIS, self)).chop
  end
  # -
  def m2w(cpi, buf)
    nLen = MultiByteToWideChar.call(cpi, 0, buf, -1, nil, 0) * 2
    wBuf = "\0" * nLen
    MultiByteToWideChar.call(cpi, 0, buf, -1, wBuf, nLen)
    return wBuf
  end
  def w2m(cpi, buf)
    nLen = WideCharToMultiByte.call(cpi, 0, buf, -1, nil, 0, nil, nil) * 2
    wBuf = "\0" * nLen
    WideCharToMultiByte.call(cpi, 0, buf, -1, wBuf, nLen, nil, nil)
    return wBuf
  end
end[/pre]
读取Shift-JIS编码的文件:
[pre lang="ruby" line="1"]str = File.open(filename).read
p str.j2u[/pre]

点评

啥? 要怎么转不是你自己设定嘛 - -b  发表于 2013-10-9 16:19
介个V587啊,话说VA没有内置的地方可以修改地方吗?比如把unicode替换成GBK就完成转换之类的,我以前写代码都是在代码头说明这东西,也方便替换  发表于 2013-10-9 16:01

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
迷糊的安安 + 100 + 1 认可答案 附赠66RPG提供的精美好人卡一张^^.

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部