社区
C语言
帖子详情
怎样区分一个缓冲区中存的是ANSI字符串还是UNICODE字符串
star19678051
2011-09-20 09:47:56
如题!
望高手们解答.........
...全文
199
19
打赏
收藏
怎样区分一个缓冲区中存的是ANSI字符串还是UNICODE字符串
如题! 望高手们解答.........
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
star19678051
2011-09-26
打赏
举报
回复
[Quote=引用 18 楼 jzy0801 的回复:]
在windows字符编码中有一个BOM概念,BOM是用来表示字节顺序即大端和小端,因为ANSI是一个字节,不会出现字节顺序,因此不需要BOM来标识字节顺序,这样我们可以对缓冲区中的前两个字节进行判断,如果不是FF FE或者不是FE FF的话,可以说明是ANSI字符,否则可以认为是UNICODE字符(当然了我们没有考虑UTF-8和UTF-16字符编码),只是一个简单的判断方法!
[/Quote]
貌似ANSI和UNICODE中都没有你说的情况
JZY0801
2011-09-21
打赏
举报
回复
在windows字符编码中有一个BOM概念,BOM是用来表示字节顺序即大端和小端,因为ANSI是一个字节,不会出现字节顺序,因此不需要BOM来标识字节顺序,这样我们可以对缓冲区中的前两个字节进行判断,如果不是FF FE或者不是FE FF的话,可以说明是ANSI字符,否则可以认为是UNICODE字符(当然了我们没有考虑UTF-8和UTF-16字符编码),只是一个简单的判断方法!
AndyZhang
2011-09-21
打赏
举报
回复
这个真心没法看吧
star19678051
2011-09-21
打赏
举报
回复
[Quote=引用 10 楼 sptoor 的回复:]
引用楼主 star19678051 的回复:
如题!
望高手们解答.........
试一试IsTextUnicode函数呢
BOOL IsTextUnicode(
__in const VOID *lpv,
__in int iSize,
__inout LPINT lpiResult
);
参考MSDN
http://msdn.mic……
[/Quote]
这个用过了,不知道为神马,无论怎样都是返回false的.... .. . . . ..
欣客
2011-09-20
打赏
举报
回复
单纯从缓冲区来看,藐视还真没办法。
star19678051
2011-09-20
打赏
举报
回复
[Quote=引用 1 楼 c_losed 的回复:]
ANSII的话 应该类似 31 32 33
UNICODE 应该是31 00 32 00 33 00
[/Quote]
这个我知道,但字符串是不定的,有时里面只有一个字符,那就难判断了.... ...
如只有 32 00那么他是UNICODE还是ANSI呢?
c_losed
2011-09-20
打赏
举报
回复
ANSII的话 应该类似 31 32 33
UNICODE 应该是31 00 32 00 33 00
mengmingtao
2011-09-20
打赏
举报
回复
mark~。
Roy_Smiling
2011-09-20
打赏
举报
回复
我是来打酱油的哦
0153
2011-09-20
打赏
举报
回复
单看缓冲区,是无法区分UNICODE还是ANSI的,当然,如果知道缓冲区有效数据的长度,是可以推算的。
hyztcy
2011-09-20
打赏
举报
回复
unicode 一般都是大于128(unisigned)的byte开头然后连续两个字符(如果只有asc和unicode的话)
luciferisnotsatan
2011-09-20
打赏
举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]
'2'在内存中是32
L'2'在内存中是32 00
"2"在内存中也是32 00
L"2"在内存中是32 00 00 00
[/Quote]
后两个要分大小端
波特王子
2011-09-20
打赏
举报
回复
[Quote=引用楼主 star19678051 的回复:]
如题!
望高手们解答.........
[/Quote]
试一试IsTextUnicode函数呢
BOOL IsTextUnicode(
__in const VOID *lpv,
__in int iSize,
__inout LPINT lpiResult
);
参考MSDN
http://msdn.microsoft.com/en-us/library/dd318672%28VS.85%29.aspx
赵4老师
2011-09-20
打赏
举报
回复
'2'在内存中是32
L'2'在内存中是32 00
"2"在内存中
也
是32 00
L"2"在内存中是32 00 00 00
luciferisnotsatan
2011-09-20
打赏
举报
回复
[Quote=引用 6 楼 jackyjkchen 的回复:]
windows api有判断函数,但Windows 核心编程都说了不能完全准确
[/Quote]
碰到纯英文的utf-8就不是到到底是acsii还是utf-8了。
lancerEx
2011-09-20
打赏
举报
回复
翻书去
jackyjkchen
2011-09-20
打赏
举报
回复
windows api有判断函数,但Windows 核心编程都说了不能完全准确
lengxujun
2011-09-20
打赏
举报
回复
在缓冲末尾加00 00,然后分别用ASCII和Unicode函数输出一下,看有没有乱码:
如果ASCII和Unicode输出函数都没有乱码,那肯定是ACSII了;
如果ASCII输出函数输出乱码,Unicode输出函数输出正常,那肯定是unicode了;
如果...
如果...
然后我把lz弄的神经错乱了,我自己也神经错乱。
警告:
以上回答纯属胡言乱语,错信者后果自负。对于那些造成神经错乱,精神失常者,本人概不负责!!!
whizer
2011-09-20
打赏
举报
回复
单从缓冲区来看,没有办法。
C++编程之CString、string与、char数组的转换
C++编程之CString、string与、char数组的转换 ...//----------------
ANSI
字符串
转换为
UNICODE
字符串
----------------------// // 待转换的数组 char szDCBparam[50] = {'0','1','\0'}; // 计算需要的
缓冲区
大小 DWORD
【升级】易语言文件解锁(关闭句柄法)-易语言
' 指针
ANSI
字符串
缓冲区
由Rtl
Unicode
StringTo
Ansi
String以前分配的。 RtlFree
Ansi
String (
ansi
) str = “无法获取”' 无效的怎么获取…… 返回 (str) 这一次呢更新了
一个
RemoteCloseHandle ,大概的原理是什么呢...
win32_utf8:对本机Win32
ANSI
应用程序的透明UTF-8支持
通过简单地包括win32_utf8.h并链接到该库,您就可以在使用本机Win32 API的应用程序中自动具有
Unicode
兼容性,通常不需要使用char
字符串
更改现有代码。 扩展功能 此外,该库还在某些原始Windows功能中添加了新的有用...
UNICODE
和
ANSI
字符串
的转换
Windows为我们提供了这样的函数来处理这个问题: 1.MultiByteToWideChar 函数功能:该函数映射
一个
字符串
到
一个
宽字符 (
unicode
)的
字符串
。由该函数映射的
字符串
没必要是多字节字符组。 函数原型:int ...
Unicode
和
Ansi
下的字符和
字符串
转换问题
在
ANSI
中使用单引号定义
一个
字符常量(如'a'),使用双引号定义
字符串
常量(如"Hello")。同样定义字符变量、字符数组或者字符指针,在C++程序中通常使用char或char*数据类型来定义。同时Win32 AP...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章