UTF-8编码在VS2008编辑器中的问题

时间:2022-06-01 21:38:33
字符串常量如下:

“数据库.db”
"test.db"

在vs2008编辑器中以上常量的编码分别是什么?

问题来源:sqlite数据库需要传送utf-8格式的路径,传上面第一个路径后,自动创建的数据库中文名字不能正常显示为“数据库.db”,需呀WideCharToMultiByte转换后再传送才能显示(在转换时需要将字符常量加上‘L’),第二个可以直接使用!什么原因?在编辑器中这些字符串常量是什么编码?

12 个解决方案

#1


1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

#2


设置中选择的字符集如下
Use Unicode Character Set

#3


引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码?

#4


引用 3 楼 zgklem 的回复:
引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码……

看你怎么定义的了:
比如:char* p = "test.db";不管你选择啥编码都是多字节的(ascii码了)

TCHAR* P = _T("test.db"); 这个你选啥编码他就是啥,可以看看TCHAR定义

WCHAR* p  = _T("test.db");这个在unicode下就是unicode编码了

#5


引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用AS……

那么
char* p="数据库.db";是什么编码?

#6


引用 5 楼 zgklem 的回复:
引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unic……


多字节编码,就是汉字2字节,ascii码一个字节的混合体

#7


其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的

#8


该回复于2011-01-12 16:29:40被版主删除

#9


你工程的设置决定了所有的字符存储形式。然后根据你工程的设置对字符串进行转换

#10


引用 7 楼 varding 的回复:
其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的

在理。

#11


引用 6 楼 varding 的回复:
引用 5 楼 zgklem 的回复:

引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量……

刚才用记事本做了个实验,我用gb2312保存了“数据库”这几个字符,然后用utf8打开,显示出的字符串为“口”,和我上面提到的sqlite生成的数据库名称一样,看来,在中文操作系统中,char指针指向的字符串常量应该是采用GB2312编码的,在另一楼里有位大侠也是这样说的!

感谢大侠的指点!

#12


把这个问题弄清楚比较重要!让大家先看一会吧,晚上再结贴!结贴后大家可能就看不到了!

#1


1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

#2


设置中选择的字符集如下
Use Unicode Character Set

#3


引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码?

#4


引用 3 楼 zgklem 的回复:
引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用ASCII编码,其它字符就用Unicode编码……

看你怎么定义的了:
比如:char* p = "test.db";不管你选择啥编码都是多字节的(ascii码了)

TCHAR* P = _T("test.db"); 这个你选啥编码他就是啥,可以看看TCHAR定义

WCHAR* p  = _T("test.db");这个在unicode下就是unicode编码了

#5


引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unicode编码的?难道属于ASCII中的就用AS……

那么
char* p="数据库.db";是什么编码?

#6


引用 5 楼 zgklem 的回复:
引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量在编辑器中是以ASCII编码的还是Unic……


多字节编码,就是汉字2字节,ascii码一个字节的混合体

#7


其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的

#8


该回复于2011-01-12 16:29:40被版主删除

#9


你工程的设置决定了所有的字符存储形式。然后根据你工程的设置对字符串进行转换

#10


引用 7 楼 varding 的回复:
其实你设置了工程编码方式,比如:多字节和unicode,并不是说你的字符串全部变成多字节和unicode了,只是说windows的api全部“需要”这种编码了,字符串编码方式还是你自己搞的

在理。

#11


引用 6 楼 varding 的回复:
引用 5 楼 zgklem 的回复:

引用 4 楼 varding 的回复:
引用 3 楼 zgklem 的回复:

引用 1 楼 varding 的回复:
1、字符串的编码就是你工程里选择的,只有unicode和多字节,没有utf8,所以utf8是必须要转换才能用
2、utf8编码里面ascii码是不变的,所以你第二个就对了,而第一个里面包含了中文就必须转换

那么字符串常量……

刚才用记事本做了个实验,我用gb2312保存了“数据库”这几个字符,然后用utf8打开,显示出的字符串为“口”,和我上面提到的sqlite生成的数据库名称一样,看来,在中文操作系统中,char指针指向的字符串常量应该是采用GB2312编码的,在另一楼里有位大侠也是这样说的!

感谢大侠的指点!

#12


把这个问题弄清楚比较重要!让大家先看一会吧,晚上再结贴!结贴后大家可能就看不到了!