亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用go在Windows控制臺中正確輸出字符串?

如何使用go在Windows控制臺中正確輸出字符串?

Go
飲歌長嘯 2021-05-13 18:19:54
我有一個exe可以打印utf-8編碼的字符串的字符串,其中帶有特殊字符。由于該exe是從控制臺窗口使用的,因此它的輸出被修改了,因為Windows使用了ibm850編碼(aka code page 850)。您如何確保goexe為控制臺窗口打印正確編碼的字符串,例如,打?。酣Θ????ùòèì?而不是(不對正確的字符集進行任何翻譯)├?├?├?├?├?├┤├╣├▓├?├?├?
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

// Alert: This is Windows-specific, uses undocumented methods, does not

// handle stdout redirection, does not check for errors, etc.

// Use at your own risk.

// Tested with Go 1.0.2-windows-amd64.


package main


import "unicode/utf16"

import "syscall"

import "unsafe"


var modkernel32 = syscall.NewLazyDLL("kernel32.dll")

var procWriteConsoleW = modkernel32.NewProc("WriteConsoleW")


func consolePrintString(strUtf8 string) {

    var strUtf16 []uint16

    var charsWritten *uint32


    strUtf16 = utf16.Encode([]rune(strUtf8))

    if len(strUtf16) < 1 {

        return

    }


    syscall.Syscall6(procWriteConsoleW.Addr(), 5,

        uintptr(syscall.Stdout),

        uintptr(unsafe.Pointer(&strUtf16[0])),

        uintptr(len(strUtf16)),

        uintptr(unsafe.Pointer(charsWritten)),

        uintptr(0),

        0)

}


func main() {

    consolePrintString("Hello ?\n")

    consolePrintString("éè????ùòèì?\n")

}


查看完整回答
反對 回復 2021-05-17
  • 3 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號