【问题】go代码运行出错:# command-line-arguments .\EmulateLoginBaidu.go:86: illegal UTF-8 sequence

【问题】

折腾:

【记录】用go语言实现模拟登陆百度

期间,去运行代码:

package main

import (
    "fmt"
    "log"
    "os"
    //"io/ioutil"
    //"net/http"
    "runtime"
    "path"
    "strings"
)

// GetCurFilename
// Get current file name, without suffix
func GetCurFilename() string {
    _, fulleFilename, _, _ := runtime.Caller(0)
    //fmt.Println(fulleFilename)
    var filenameWithSuffix string
    filenameWithSuffix = path.Base(fulleFilename)
    //fmt.Println("filenameWithSuffix=", filenameWithSuffix)
    var fileSuffix string
    fileSuffix = path.Ext(filenameWithSuffix)
    //fmt.Println("fileSuffix=", fileSuffix)
    
    var filenameOnly string
    filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)
    //fmt.Println("filenameOnly=", filenameOnly)
    
    return filenameOnly
}

//get url response html
func GetUrlRespHtml(url string) string{
    var respHtml string = "";
    
    resp, err := http.Get(url)
    if err != nil {
        fmt.Printf("http get response errror=%s\n", err)
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    //fmt.Printf("body=%s\n", body)
    
    respHtml = body

    return respHtml
}

func main() {
    fmt.Printf("this is EmulateLoginBaidu.go\n")
    
    var filenameOnly string
    filenameOnly = GetCurFilename()
    fmt.Println("filenameOnly=", filenameOnly)
    
    var logFilename string =  filenameOnly + ".log";
    fmt.Println("logFilename=", logFilename)
    //logfile,err: = os.OpenFile("/Users/cybercare/tmp/test.log",os.O_RDWR|os.O_CREATE,0666)
    //logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777)
    //logFile, err: = os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777);
    logFile, err := os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777)
    if err != nil {
        fmt.Printf("open file error=%s\r\n", err.Error())
        os.Exit(-1)
    }

    defer logFile.Close()
    //logger:=log.New(logFile,"\r\n", log.Ldate | log.Ltime | log.Llongfile)
    logger:=log.New(logFile,"\r\n", log.Ldate | log.Ltime | log.Lshortfile)
    logger.Println("normal log 1")
    logger.Println("normal log 2")
    //【已解决】go代码出错退出:exit status 1
    //http://www.crifan.com/go_language_can_printf_info_and_exit_status_1/
    //logger.Panic("panic 1")
    //logger.Fatal("fatal 1")
    
    var baiduMainUrl string
    baiduMainUrl = "http://www.baidu.com/";
    //baiduMainUrl := "http://www.baidu.com/";
    //var baiduMainUrl string = "http://www.baidu.com/";
    fmt.Printf("baiduMainUrl=%s", baiduMainUrl)
    respHtml := GetUrlRespHtml(baiduMainUrl)
    logger.Printf("respHtml=%s", respHtml)
}

结果出错:

D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go
# command-line-arguments
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        a1 be
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        d2 d1
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        bd e2
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        be f6
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        a1 bf
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        b4 fa
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        c2 eb
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        b3 f6
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
        b4 ed
.\EmulateLoginBaidu.go:73: illegal UTF-8 sequence
.\EmulateLoginBaidu.go:73: too many errors

D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>

如图:

EmulateLoginBaidu go 73 illegal UTF-8 sequence

即:

illegal UTF-8 sequence

【解决过程】

1.很明显,是字符编码问题。

2.去看了看当前的文件,果然是GBK的:

go code contain zh cn char but is gbk

所以,去改为UTF-8:

change to utf-8 then reopen show utf-8 format

然后再去重新编译代码,果然就可以了。

至少没有这个utf-8的错误提示了。

 

【总结】

go代码的文件编码中,如果包含非英文字符,比如此处的中文,如果go文件本身是非UTF-8编码,即使是放在注释里面,也是不行的。

必须要确保go文件本身是UTF-8编码的才可以的。

 

注:

Notepad++可以实现文件编码转换,不熟悉的可以参考:

用Notepad++实现不同字符编码之间的转换



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量