“数据库.db”
"test.db"
在vs2008编辑器中以上常量的编码分别是什么?
问题来源:sqlite数据库需要传送utf-8格式的路径,传上面第一个路径后,自动创建的数据库中文名字不能正常显示为“数据库.db”,需呀WideCharToMultiByte转换后再传送才能显示(在转换时需要将字符常量加上‘L’),第二个可以直接使用!什么原因?在编辑器中这些字符串常量是什么编码?
12 个解决方案
#1
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换
#2
设置中选择的字符集如下
Use Unicode Character Set
Use Unicode Character Set
#3
那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码?
#4
看你怎么定义的了:
比如:char* p = "test.db";不管你选择啥编码都是多字节的(ascii码了)
TCHAR* P = _T("test.db"); 这个你选啥编码他就是啥,可以看看TCHAR定义
WCHAR* p = _T("test.db");这个在unicode下就是unicode编码了
#5
那么
char* p="数据库.db";是什么编码?
#6
多字节编码,就是汉字2字节,ascii码一个字节的混合体
#7
其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的
#8
#9
你工程的设置决定了所有的字符存储形式。然后根据你工程的设置对字符串进行转换
#10
在理。
#11
刚才用记事本做了个实验,我用gb2312保存了“数据库”这几个字符,然后用utf8打开,显示出的字符串为“口”,和我上面提到的sqlite生成的数据库名称一样,看来,在中文操作系统中,char指针指向的字符串常量应该是采用GB2312编码的,在另一楼里有位大侠也是这样说的!
感谢大侠的指点!
#12
把这个问题弄清楚比较重要!让大家先看一会吧,晚上再结贴!结贴后大家可能就看不到了!
#1
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换
#2
设置中选择的字符集如下
Use Unicode Character Set
Use Unicode Character Set
#3
那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码?
#4
看你怎么定义的了:
比如:char* p = "test.db";不管你选择啥编码都是多字节的(ascii码了)
TCHAR* P = _T("test.db"); 这个你选啥编码他就是啥,可以看看TCHAR定义
WCHAR* p = _T("test.db");这个在unicode下就是unicode编码了
#5
那么
char* p="数据库.db";是什么编码?
#6
多字节编码,就是汉字2字节,ascii码一个字节的混合体
#7
其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的
#8
#9
你工程的设置决定了所有的字符存储形式。然后根据你工程的设置对字符串进行转换
#10
在理。
#11
刚才用记事本做了个实验,我用gb2312保存了“数据库”这几个字符,然后用utf8打开,显示出的字符串为“口”,和我上面提到的sqlite生成的数据库名称一样,看来,在中文操作系统中,char指针指向的字符串常量应该是采用GB2312编码的,在另一楼里有位大侠也是这样说的!
感谢大侠的指点!
#12
把这个问题弄清楚比较重要!让大家先看一会吧,晚上再结贴!结贴后大家可能就看不到了!