在 MBCS 操作系统上运行单字节字符应用程序的风险
我有一个 MFC 应用程序,其中字符集为“未设置”。在具有多字节字符集代码页的操作系统上运行此应用程序有哪些相关风险?
I have an MFC application where the Character Set is "Not Set". What are the risks associated with running this application on a OS that has a Multi Byte Character Set code page?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
“字符集:未设置”选项既不定义
_MBCS
也不定义_UNICODE
。这意味着您正在使用 *A 系列函数。即使未定义_MBCS
,这些将返回 MBCS 字符串。如果
_MBCS
不影响从 *A 函数返回的字符串,那么它会做什么?它将一些tcs*
函数映射到其mbs*
版本,而不是str*
> 或wcs*
变体。例如,如果没有_MBCS
,_tcsrev
映射到strrev
,而不是_mbsrev
。因此,您可能无法反转从操作系统收到的多字节字符串,或以其他方式编辑它们。
The "Character Set: Not Set" option defines neither
_MBCS
nor_UNICODE
. That means that you're using the *A series of functions. Those will return MBCS strings, even when_MBCS
is not defined.If
_MBCS
doesn't affect the strings returned from the *A functions, then what does it do? It maps some<tchar.h>
tcs*
functions to theirmbs*
versions, instead of thestr*
orwcs*
variants. E.g. without_MBCS
,_tcsrev
maps tostrrev
, not_mbsrev
.Therefore, you may not be able to reverse the multi-byte strings you receive from the OS, or edit them otherwise.
风险是:
1) 如果您使用非英语文本,并且用户输入俄语,则某些未映射到 MBCS 或需要字符集层的俄语字符将被检索为“?”
2) 您需要告知客户该应用程序。仅接受英文,并且不保证应用程序在输入非英文字符时能够正确接受或检索非英文文本。
3) 任何带有外语字符的文本都可能导致重音符号和变音符号不希望或不希望的转换为其他内容。
The risks are:
1) If you use non-English texts, and the user enters, say, Russian, some Russian characters that are not mapped to MBCS or require a Charset layer, will be retrieved as '?'
2) You need to inform the customer that the App. accepts English-only and no guarantee the App, when entering non-English characters, would accept or retrieve non-English texts correctly.
3) Any texts with foreign language characters may lead to unwanted or undesired conversion of accents and diacritics to something else.