golang gbk转utf8 mssql access
package ms2mysql
import (
"bytes"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
"io/ioutil"
)
func Decode(s []byte) ([]byte, error) {
I := bytes.NewReader(s)
O := transform.NewReader(I, simplifiedchinese.GBK.NewDecoder())
d, e := ioutil.ReadAll(O)
if e != nil {
return nil, e
}
return d, nil
}
win7 64位下试了好几个其他方式,结果都不行,也就这个可以,记录下来
package main import (
"fmt"
"reflect"
"unsafe" "ms2mysql/lib" "github.com/go-xorm/core"
"github.com/go-xorm/xorm"
_ "github.com/lunny/godbc"
) var engine *xorm.Engine func BytesToString(b []byte) string {
bh := (*reflect.SliceHeader)(unsafe.Pointer(&b))
sh := reflect.StringHeader{bh.Data, bh.Len}
return *(*string)(unsafe.Pointer(&sh))
} func StringToBytes(s string) []byte {
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
bh := reflect.SliceHeader{sh.Data, sh.Len, }
return *(*[]byte)(unsafe.Pointer(&bh))
}
func main() {
var err error
engine, err := xorm.NewEngine("odbc", "driver={SQL Server};Server=127.0.0.1;Database=test;uid=sa;pwd=123456;")
if err != nil {
fmt.Println(err)
return
}
if err := engine.Ping(); err != nil {
fmt.Println(err)
}
engine.ShowSQL(true)
engine.Logger().SetLevel(core.LOG_DEBUG)
//encode:=mahonia.NewEncoder("utf-8")
sql := "SELECT * FROM \"USERINFO\";"
rowArray, _ := engine.Query(sql)
for _, row := range rowArray {
for colname, colvalue := range row {
v, _ := ms2mysql.Decode(colvalue)
value := BytesToString(v)
fmt.Println(colname, value)
}
}
}
也许可以这样连接access文件(64位win7系统测试不成功,也不想测试了,感觉微软的东西用32位系统应该可以,这里作为记录,或许以后用得到)如下:
package main import (
"database/sql"
"fmt" "github.com/go-ole/go-ole"
"github.com/go-ole/go-ole/oleutil"
_ "github.com/mattn/go-adodb"
) func createMdb(f string) error {
unk, err := oleutil.CreateObject("ADOX.Catalog")
if err != nil {
return err
}
cat, err := unk.QueryInterface(ole.IID_IDispatch)
if err != nil {
return err
}
_, err = oleutil.CallMethod(cat, "Create", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+f+";")
if err != nil {
return err
}
return nil
} func main() {
ole.CoInitialize() f := "E:\\access\\x.mdb" /*os.Remove(f) err := createMdb(f)
if err != nil {
fmt.Println("create mdb", err)
return
}*/ db, err := sql.Open("adodb", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+f+";")
if err != nil {
fmt.Println("open", err)
return
}
fmt.Println(db)
/*
_, err = db.Exec("create table foo (id int not null primary key, name text not null, created datetime not null)")
if err != nil {
fmt.Println("create table", err)
return
} tx, err := db.Begin()
if err != nil {
fmt.Println(err)
return
}
stmt, err := tx.Prepare("insert into foo(id, name, created) values(?, ?, ?)")
if err != nil {
fmt.Println("insert", err)
return
}
defer stmt.Close() for i := 0; i < 100; i++ {
_, err = stmt.Exec(i, fmt.Sprintf("xxx", i), time.Now())
if err != nil {
fmt.Println("exec", err)
return
}
}
tx.Commit()*/ rows, err := db.Query("select UserID, DeviceID from UserACPrivilege")
if err != nil {
fmt.Println("select", err)
return
}
defer rows.Close() for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
fmt.Println("scan", err)
return
}
fmt.Println(id, name)
}
}
golang gbk转utf8 mssql access的更多相关文章
- golang GBK与UTF-8互转的例子
package main import ( "code.google.com/p/mahonia" "fmt" ) func main() { //" ...
- Golang中GBK和UTF8编码格式互转
Golang中GBK和UTF8编码格式互转 需求 已知byte数组的编码格式转换 实现代码 package utils import ( "bytes" "golang. ...
- Encoding::CompatibilityError: incompatible character encodings: GBK and UTF-8
直接grunt serve读的css是.tmp/css/main.css 而这个文件不通过build生成出来是这样: /* Encoding::CompatibilityError: incompat ...
- 彻底搞懂编码 GBK 和 UTF8
常用编码格式一览 首先来看一下常用的编码有哪些,截图自Notepad++.其中ANSI在中国大陆即为GBK(以前是GB2312),最常用的是 GBK 和 UTF8无BOM 编码格式.后面三个都是有BO ...
- gbk与utf-8转换
linux: #include <iconv.h> int code_convert(char *from_charset,char *to_charset,char *inbuf,int ...
- 字符集GBK升级UTF8
在生产环境中,数据库字符集因为各种原因需要升级,比如为了支持汉字,从latin1字符集升级到GBK,后面为了支持多个语言文字,需要将GBK升级到UTF8等.迁移过程网上有很多,我今天主要想讲下字符集转 ...
- GB2312、GBK和UTF-8三种编码以及QT中文显示乱码问题
1.GB2312.GBK和UTF-8三种编码的简要说明 GB2312.GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码.只是对于我们中国人的应用来说,用这三种编码 比较多.简单的说一下, ...
- Java 中文字符串编码之GBK转UTF-8
写过两篇关于编码的文章了,以为自己比较了解编码了呢?! 结果今天又结结实实的上了一课. 以前转来转去解决的问题终归还是简单的情形.即iso-8859-1转utf-8,或者iso-8859-1转gbk, ...
- iconv命令 gbk 转 UTF-8
-----linux gbk 转 UTF-8-------- iconv 用法 iconv -f "gbk" -t "utf-8" < infile &g ...
随机推荐
- php使用saop简单例子和注意事项
首先配置下PHP的soap环境支持: 找到php.ini文件:extension=php_soap.dll :always_populate_raw_post_data = -1 删除掉": ...
- Java开发必会的Linux命令
Java开发必会的Linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器 ...
- leetcode-【中等题】228. Summary Ranges
题目: 228. Summary Ranges Given a sorted integer array without duplicates, return the summary of its r ...
- IntelliJ IDEA常用设置及快捷键
IntelliJ IDEA是一款非常优秀的JAVA编辑器,初学都可会对其中的一些做法感到很别扭,刚开始用的时候我也感到很不习惯,在参考了网上一些文章后在这里把我的一些经验写出来,希望初学者能快速适应它 ...
- Nginx配置文件(nginx.conf)配置详解(2)
Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- ListView 中的ImageView Button
1.ListView 中的ImageView Button的点击事件会屏蔽掉ItemView的点击事件 原因是ImageView Button在回执过程中会抢夺item的焦点 解决办法:在xml中添 ...
- truncate table和delete table 的区别
truncate table和不带 where 的 detele 功能一样,都是删除表中的所有数据. 但TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE ...
- HTML5标签的3大类型
1>块级标签: 独占一行的标签,能随时设置宽度和高度 比如:div.p.h1.h2.u1.li 2>行内标签(内联标签): 多个行内标签能同时显示在一行,宽度和高度取决于内容的尺寸 比如: ...
- typeahead.js 使用记录
github地址:https://github.com/twitter/typeahead.js 在aceAdmin界面模板中,有typeahead这一控件,版本号为0.10.2 , 这个版本对 mi ...