设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

编码不同的问题

查看数: 2997 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2010-10-8 18:56

正文摘要:

1.用Excel的csv格式保存的文件RM读取到的中文全是乱码 2.用RM导出变量保存成.csv格式,文本打开是正常的,Excel打开就是乱码(有中文的情况)。 只要解决1的问题就行了。 脚本里写$KCODE="ANSI" 还是没用. ...

回复

紫苏 发表于 2010-10-9 06:51:08
我脑残了 = =|| UTF-8 是输入端(编码端)定的,和获取输入之后的 $KCODE (解码端)没关系,那样的话就只能转码了,看禾西给的脚本

评分

参与人数 1星屑 +20 收起 理由
IamI + 20 安慰= =b

查看全部评分

禾西 发表于 2010-10-9 02:17:59
本帖最后由 禾西 于 2010-10-10 03:02 编辑
  1. # Iconv.u2a(string text) => 轉為 ANSI
  2. # Iconv.a2u(string text) => 轉為 UNICODE
  3. # Iconv.conv(string code_tpye, string text)
  4. #// code_tpye :
  5. #// "u" => 轉為 ANSI
  6. #// "a" => 轉為 UNICODE

  7. module Iconv
  8.    CP_ACP = 0
  9.    CP_UTF8 = 65001
  10.    M2W = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
  11.    W2M = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
  12.   def self.u2a(text)
  13.     n = 0
  14.     i = M2W.call(CP_UTF8, 0 , text, -1,nil,0)
  15.     buf = "\0" * i * 2
  16.     M2W.call(CP_UTF8, 0 , text, -1, buf, i/2)
  17.     i = W2M.call(CP_ACP, 0, buf, -1, nil, 0, nil, nil)
  18.     ret = "\0" * i
  19.     W2M.call(CP_ACP, 0, buf, -1, ret, i, nil, nil)
  20.     return ret
  21.   end
  22.   def self.a2u(text)
  23.     i = M2W.call(CP_ACP, 0, text, -1, nil, 0)
  24.     buf = "\0" * i * 2
  25.     M2W.call(CP_ACP, 0, text, -1, buf, i / 2)
  26.     i = W2M.call(CP_UTF8, 0, buf, -1, nil, 0, nil, nil)
  27.     ret = "\0" * i
  28.     W2M.call(CP_UTF8, 0, buf, -1, ret, i, nil, nil)
  29.     return ret
  30.   end
  31.   def self.conv(convert_2, text)
  32.     case convert_2
  33.     when "u"
  34.       return self.u2a(text)
  35.     when "a"
  36.       return self.a2u(text)
  37.     end
  38.   end
  39. end
复制代码

点评

搞不懂,求二連O O  发表于 2010-10-10 03:02
ASCII 和 ANSI 还是有区别的,此处应为 ANSI o.o  发表于 2010-10-10 03:00
i / 2 改 i 就好了  发表于 2010-10-9 21:12
用Iconv.u2a转换出的变量(p命令显示乱码) 只有1半的字节这是为什么类? 把变量*2(又被吞掉1半) 这样可以临时解决...  发表于 2010-10-9 21:06
能用呢 谢谢  发表于 2010-10-9 19:28

评分

参与人数 1星屑 +200 收起 理由
IamI + 200 认可答案

查看全部评分

IamI 发表于 2010-10-8 22:14:32
Rm的编码是utf。1.8.4没有字符串内置编码,用api吧
紫苏 发表于 2010-10-8 21:38:00
这个是 GB2312 编码,你能用记事本打开,说明这是你当前 locale 的代码页,所以用 ANSI 应该是没问题的,只不过你设置 $KCODE 的方式不对,应该用 $KCODE = 'N',表示不使用任何字符集。
不过这个同时也会影响源文件的解释,这是 Ruby 1.8 的缺点。1.9 的字符串编码就完善多了。
熊猫 发表于 2010-10-8 21:22:59
回复 wbsy8241 的帖子


    简单方法就是用VC++写一个DLL调用.......
熊猫 发表于 2010-10-8 20:19:30
我认为是可以正常保存的。试了下KCODE不管是ANSI还是GBK都不好使....
EXCEL应该是ANSI码。LZ可以试验用记事本另存一份UTF-8编码的csv文件,这样在RM中就没问题了。
紫苏 发表于 2010-10-8 20:13:34
我记得以前的 Excel 版本本身就无法正常保存/读取中文到/自 csv,也不知现在如何了。你用十六进制编辑器查看一下文件内容,大概能猜出 Excel 用的什么编码,通用的也就那么几个
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 12:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表