C#通过SQLiteDataReader读取GBK(gb2312)格式的SqLite数据库

news/发布时间2024/5/18 17:56:08

正常情况下,C#通过SQLiteDataReader读SqLite数据库,不论读写都是采用的uft-8格式编码。

但是我在搞QQ群机器人(Mirai)的时候,遇到了读取以前旧版本机器人数据库的情况。旧片机器人是采用java或者C++程序写的,存取时的编码是GBK(gb2312),然后在原来的程序里面打开和编辑的时候都是正常的。

但是我用SQLiteStudio读取出来的就是乱码,一度我以为是原来的程序在存取的时候做了加密或者转码,直到前几天遇到另一个SqLite工具:sqlite admin,在这个工具里面打开数据库,就是正常显示的内容。所以,是我把问题想复杂了。

然后我就断断续续尝试了好几天,想要通过一定的试,让【System.Data.SQLite】能够以“GBK”方式读取数据库,但是都失败了。

我看到有的资料说,System.Data.SQLite在 SQLiteDataReader的 GetString(i)方法当中,做了一次转utf-8的操作。

所以,我就想尝试跳过这一步,直接读取原来的字节流。

 但是这个方法是不行的。这种读取字节的方式,只允许针对 Blog类型的字段(上传的音频、图片、视频、PDF等等)。

到这里,我都已经放弃了。换成python的话,其实很简单。

但是我又不死心,换回来用C#继续搞。

其中遇到这个教程,我都以为终于解决了。

http://www.aiyiweb.com/csharp/55605

然而实际上还是不行。

只能继续找啊找,直到发现了这一篇:

https://www.php1.cn/detail/-CSharpTips-C-_D_cd072edb.html

它的核心原理是,SQLiteDataReader将字符转成utf-8之前,在执行sql的时候,抢先一步将数据库里面的内容(byte)转换为16进制格式的字符串。

 读取出来之后再经过两步还原,就得到了原来的字符内容了。

 

因为原贴的是别的地方从园子里盗贴的,所以,它有一段代码显示不全,我就用另一个方法一还原的。

我在周五的晚上搞出来以后,电脑开着很多的程序,玩了一会LOL,没想到电脑突然重启了,程序虽然没有影响,但是中间找过的各种资料都不见了。

今天又重新找了一下,这里发现,原来这个方案是园子里面的:

https://www.cnblogs.com/axiaoshuye/p/15895229.html 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/31254354.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

软件工程-个人项目

github地址 GitHub PSP表格PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 40 30 Estimate估计这个任务需要多少时间 1500 1500Development 开发 420 400 Analysis需求分析 (包括学习新技术) 180 150 Design Spec生成设计文档 60 …

9.15课堂验证(已在文件发表)

TestDouble: 源代码: public class TestDouble { public static void main(String args[]) {System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));System.out.println("4.015 * 100 = &qu…

DVWA靶场通关-File Upload(文件上传)

Brute Force(暴力(破解))、Command Injection(命令行注入)、CSRF(跨站请求伪造)、 File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA (不安全的验证码)、 SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(…

使用nssm将frpc安装为windows服务

在Windows 中配置启动项仅是在用户登录后运行。在登录前要启动就需要将其配置为“服务”。 简介: 之前介绍过如何使用frp进行端口转发和二级域名自定义,方便公司进行统一管理和监控。 但在实际生产过程中,开发人员发现frpc的窗口为应用窗口,极易出现误操作而关闭应用窗口,…

uniapp项目实践总结(十六)自定义下拉刷新组件

导语:在日常的开发过程中,我们经常遇到下拉刷新的场景,很方便的刷新游览的内容,在此我也实现了一个下拉刷新的自定义组件。目录准备工作 原理分析 组件实现 实战演练 内置刷新 案例展示准备工作在components新建一个q-pull文件夹,并新建一个q-pull.vue的组件; 按照前面文…

day04-数据类型

1、基本数据类型 在我们的之前篇day02-变量中,我们介绍了变量及变量的赋值,我们都知道变量是存储在内存中的值,其实在内存中是会根据变量的数据类型,来分配指定的内存空间,那这变量的数据类型有哪些呢? Python的基本数据类型一般分为6种:Numbers(数值) String(字符串…