gowin32 release r57 编码处理有问题?

135 views
Skip to first unread message

王君

unread,
Jun 9, 2011, 10:45:12 AM6/9/11
to golang...@googlegroups.com
hi,  各位,

有人在用 gomingw 么?


我今天 在 http://code.google.com/p/gomingw/ 把  windows xp 下的 go 升级到了gowin32_release.r57.1.zip

遇到了一个问题,发觉一些字符输入变成乱码。

首先,已经确认,所有源码 go文件都是已经以UTF8 无BOM格式编码。
其它,只有中文输入都变乱码,但在升级gomingw之前的版本是正常的。

有谁知道如何解决这个问题么?








-------------------------------------------------------------------------------
gelosi...@gmail.com

愿那如梦的色彩  
擦干你的泪眼 
亦如晨曦的金灿 
赐福于你的至爱者 
年年岁岁

shiwei xu

unread,
Jun 9, 2011, 11:07:22 AM6/9/11
to golang...@googlegroups.com
是指将中文打印到屏幕乱码?

2011/6/9 王君 <gelosi...@gmail.com>

王君

unread,
Jun 9, 2011, 11:19:39 AM6/9/11
to golang...@googlegroups.com
是的。升级后就这现象,觉得很奇怪

gix...@gmail.com

unread,
Jun 9, 2011, 12:10:14 PM6/9/11
to golang...@googlegroups.com
我在Win7(64bit)下用的,好像没发现有什么问题。写代码用的是liteide。

王君

unread,
Jun 9, 2011, 10:33:13 PM6/9/11
to golang...@googlegroups.com
嗯,感谢  shiwei xu  同 gixuan 的回答。

目前找到了问题所在,主要是 我系统上  cmd.exe 是 GBK 编码。
在编译运行之前:
更改cmd.exe 编码格式为UTF-8编码显示,再进行后面的操作就正常了。

chcp 是变更  cmd 本身的编码的,下面三个是常用参考:
  1. chcp 65001  就是换成UTF-8代码页  
  2. chcp 936 可以换回默认的GBK  
  3. chcp 437 是美国英语 


-------------------------------------------------------------------------------
gelosi...@gmail.com

愿那如梦的色彩  
擦干你的泪眼 
亦如晨曦的金灿 
赐福于你的至爱者 
年年岁岁


qq wu

unread,
Jun 9, 2011, 11:30:32 PM6/9/11
to golang...@googlegroups.com
cmd.exe 默认都是GBK 编码吧,简单的把代码页改成UTF-8也有一些问题,windows控制台对UTF-8支持得不是很好。
这个不单是go的问题,好像其它语言比如Ruby, Python中也存在。
总之是,在你输出UTF8到windows控制台时,你需要一些额外的处理。

王君

unread,
Jun 9, 2011, 11:45:35 PM6/9/11
to golang...@googlegroups.com

嗯,已经确认不是  go 的问题。

cmd.exe 设置 UTF8时,两个方法:
1, 若控制台窗口 属性页下的 “默认代码页”  有utf8编码的,直接修改为 utf8编码就好。
cmd2.JPG

2, 若没有选择的话:  在 cmd.exe  下运行 “   chcp 65001    ” ,临时修改为 utf 8

至于  qq wu 说的,输出时处理 ,主要是通过  fmt.Printf前,手工转码输出了。
cmd2.JPG

shiwei xu

unread,
Jun 10, 2011, 12:11:36 AM6/10/11
to golang...@googlegroups.com
保持 cmd 用 gbk 的话,可以用我做的 iconv 包。示例见:https://github.com/xushiwei/go-iconv/blob/master/example/windows_chinese.go

package main

import (
"fmt"
)

func main() {
cd, err := iconv.Open("gbk", "utf-8")
if err != nil {
fmt.Println("iconv.Open failed!")
return
}
defer cd.Close()
fmt.Fprintln(cd, "你好,世界!")
}

这里的 cd 就可以当作 os.Stdout 来用了。输入的文本会自动转为 gbk 输出到 stdout。

如果要输出到 stderr,则:

cder, err := iconv.OpenWith("gbk", "utf-8", os.Stderr, 0, true)

其他代码一样。

2011/6/10 王君 <gelosi...@gmail.com>
cmd2.JPG

gix...@gmail.com

unread,
Jun 10, 2011, 1:00:37 AM6/10/11
to golang...@googlegroups.com
最开始,我碰到过了和 王君 一样的问题,但并没有想办法去解决,正好碰上了 liteide ,也就没想办法去解决过了。
现在学习了。
cmd2.JPG

wuqq

unread,
Jun 10, 2011, 1:01:32 AM6/10/11
to Golang-China
修改代码页的缺点是字会莫名其妙的消失,不能运行批处理等。不知道PowerShell对UTF8支持得怎么样?
如果仅仅是控制台调试的法,在源代码中编码转换的办法就有点麻烦。
推荐我的办法: http://groups.google.com/group/golang-china/browse_thread/thread/fb36f5da2d49f3f0/bac052ed449b1634#bac052ed449b1634

On 6月10日, 下午12时11分, shiwei xu <xushiwe...@gmail.com> wrote:
> 保持 cmd 用 gbk 的话,可以用我做的 iconv 包。示例见:https://github.com/xushiwei/go-iconv/blob/master/example/windows_chin...


>
> package main
>
> import (
> "fmt"
> "xushiwei.com/iconv"
> )
>
> func main() {
> cd, err := iconv.Open("gbk", "utf-8")
> if err != nil {
> fmt.Println("iconv.Open failed!")
> return
> }
> defer cd.Close()
> fmt.Fprintln(cd, "你好,世界!")
>
> }
>
> 这里的 cd 就可以当作 os.Stdout 来用了。输入的文本会自动转为 gbk 输出到 stdout。
>
> 如果要输出到 stderr,则:
>
> cder, err := iconv.OpenWith("gbk", "utf-8", os.Stderr, 0, true)
>
> 其他代码一样。
>

> 2011/6/10 王君 <gelosie.w...@gmail.com>


>
>
>
>
>
>
>
>
>
> > 嗯,已经确认不是 go 的问题。
>
> > cmd.exe 设置 UTF8时,两个方法:
> > 1, 若控制台窗口 属性页下的 "默认代码页" 有utf8编码的,直接修改为 utf8编码就好。
> > [image: cmd2.JPG]
>

> > 2, 若没有选择的话: 在 cmd.exe 下运行 " * chcp 65001 * " ,临时修改为 utf 8


>
> > 至于 qq wu 说的,输出时处理 ,主要是通过 fmt.Printf前,手工转码输出了。
>
> > --------------------------------------------------------------------------- ----

> > gelosie.w...@gmail.com


>
> > 愿那如梦的色彩
> > 擦干你的泪眼
> > 亦如晨曦的金灿
> > 赐福于你的至爱者
> > 年年岁岁
>
>
>

> cmd2.JPG
> 77K查看下载

phus lu

unread,
Jun 10, 2011, 1:32:20 AM6/10/11
to golang...@googlegroups.com
http://code.google.com/p/mintty/

Features include:

  • Xterm-compatible terminal emulation.
  • Native Windows user interface with a simple options dialog.
  • Easy copy & paste.
  • Drag & drop of text, files and folders.
  • Ability to open files and URLs with Ctrl+click.
  • Comprehensive character encoding support, including UTF-8.
  • Wide character display and Windows IME support.
  • Window transparency, including glass effect on Vista and 7.
  • 256 colours.
  • Fullscreen mode.
  • Options stored in a text file. No registry entries.
  • Small program size and quick scrolling.

Mintty works on all Windows versions from Window

--
Best Regards
Phus Lu

zhai

unread,
Jun 10, 2011, 1:47:33 AM6/10/11
to golang...@googlegroups.com
既然已经知道是windows的问题,我想最好不要再改源程序了

有个临时的解决方法: 
hello.exe  > log.txt
notepad log.txt

notepad还是能识别utf-8的

2011/6/10 shiwei xu <xushi...@gmail.com>
cmd2.JPG

Howard Fan

unread,
Jun 10, 2011, 2:32:20 AM6/10/11
to golang...@googlegroups.com
可以试试 http://ac-me.googlecode.com/files/acme.zip。是运行在 Inferno OS 虚拟机上的 ACME 程序编辑器。其 win 窗口直接支持 utf8 和常用的 Unix 命令。
Reply all
Reply to author
Forward
0 new messages