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 ...
随机推荐
- oracle安装不容易啊
oracle 配置方面,电脑端使用的是ORALE 10G 64位,PLSQL DEVELOPER使用32位,ORACLE CLIENT使用11.5版本.之前一直因为ORACLE 使用32位,导致在电脑 ...
- Datatable 筛选条件、排序 和获取datagrid当前页面 数据
1.转化为DataView进行筛选和排序 DataTable dt = BL.UserInfo();//查询返回的DataTable数据 DataTable dt2 = new DataTable( ...
- linux mail 使用外部邮箱地址发邮件
centos 61.系统yum安装的mailx会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,配置麻烦,而且会带来不必要的资源占用.通过修改配置文件可以使 ...
- cs11_c++_lab3
Matrix.hh class Matrix { int row; int col; int *p; void copy(const Matrix &m); void clearup(); p ...
- OAF屏蔽的错误
ORACLE EBS中OAF屏蔽的错误 ORACLE EBS R12中引入了XML Publisher,Oracle Application Framework等新东西,利用网页/JSP技术增强For ...
- php 判断文件/目录是否存的方法
涉及函数 is_file(), is_dir() , file_exists() is_file() 判断文件是否存在 is_dir() 判断目录是否存在 file_exists() 既可用于判断文件 ...
- mongodb 的备份恢复导入与导出
导入导出 use hndb; db.s.save({name:'李四',age:18,score:80,address:'郑州'}); db.s.save({name:'李三',age:8,score ...
- 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
[转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...
- Sql Server中不常用的表运算符之APPLY(2)
在Sql Server中不常用的表运算符之APPLY(1)中提到,SQL2005中新支持的APPLY的特性:1.可以直接将表表达式(表值函数或者子查询)作为APPLY语句的右表连接左表.2.由于使用A ...
- sql server之数据库语句优化
三.只返回需要的数据 返回数据到客户端至少需要数据库提取数据.网络传输数据.客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器.网络和客户端的无效劳动,其害处是显而易见的,避 ...