golang 调用windows API 中文的处理
2021-06-30 04:07
标签:form print 中文 了解 default 编码 app poi div Go语言发展势头很猛,其实缺点也很多,好在有广大爱好者提供了无数的库,把优点表现得太好了,搞得什么都是拿来就使用,基本完全不理会指针,性能还不错。 最近在windows下使用遇到一个中文的问题,首先要了解的是Golang的编码是utf-8的,而中文windows的API返回时多字节的GBK编码。 下面是利用API 获得进程的示例,代码是网上的,但是使用时出现了,当进程名是中文时出现的乱码问题。 先贴代码。 重要的是 golang 调用windows API 中文的处理 标签:form print 中文 了解 default 编码 app poi div 原文地址:https://www.cnblogs.com/zhujiechang/p/9998233.htmlpackage utilities
import (
"bytes"
"io"
"log"
"net/http"
"sort"
"strconv"
"strings"
"syscall"
// "unicode/utf8"
"unsafe"
"github.com/axgle/mahonia"
)
type ulong int32
type ulong_ptr uintptr
type PROCESSENTRY32 struct {
dwSize ulong
cntUsage ulong
th32ProcessID ulong
th32DefaultHeapID ulong_ptr
th32ModuleID ulong
cntThreads ulong
th32ParentProcessID ulong
pcPriClassBase ulong
dwFlags ulong
szExeFile [260]byte
}
type ProcessStruct struct {
processName string // 进程名称
processID int // 进程id
}
type ProcessStructSlice []ProcessStruct
func (a ProcessStructSlice) Len() int { // 重写 Len() 方法
return len(a)
}
func (a ProcessStructSlice) Swap(i, j int) { // 重写 Swap() 方法
a[i], a[j] = a[j], a[i]
}
func (a ProcessStructSlice) Less(i, j int) bool { // 重写 Less() 方法, 从大到小排序
if strings.Compare(a[j].processName, a[i].processName)
"github.com/axgle/mahonia" //这个库
decoder := mahonia.NewDecoder("gbk")
//gbk转utf8
var bytetest []byte = []byte(proc.szExeFile[:len_szExeFile])
_, newdata, newerr := decoder.Translate(bytetest, true)
其实里面做了判断,并不是单纯的使用utf8.EncodeRune来解决,刚开始我也是直接使用utf8这个库来尝试,没成功.
在这里做个分享,呵呵
上一篇:c#简易学生信息管理系统