如何在UTF-8和TCHAR之间进行通用转换
我知道我在网上看到过,但当我搜索它时,我只找到了一个例子。然而,只有定义了如何在UTF-8和TCHAR之间进行通用转换,c,winapi,utf-8,tchar,C,Winapi,Utf 8,Tchar,我知道我在网上看到过,但当我搜索它时,我只找到了一个例子。然而,只有定义了UNICODE时,该代码才有效,我认为我看到的代码在UNICODE未定义时有条件(我认为还有第三种情况-是否定义了MBCS) 问题是: 我能找到我以为在什么地方看到的消息来源吗 这三种情况是唯一需要处理的,我说的对吗?在非UNICODE的情况下,转换是如何完成的 转换的目的是与windows API一起使用 没有,只有两种情况。直接的(UTF-8到UTF-16)和不可能的(UTF-8到MBCS)。MBCS不能表示UTF-8
UNICODE
时,该代码才有效,我认为我看到的代码在UNICODE
未定义时有条件(我认为还有第三种情况-是否定义了MBCS
)
问题是:
转换的目的是与windows API一起使用 没有,只有两种情况。直接的(UTF-8到UTF-16)和不可能的(UTF-8到MBCS)。MBCS不能表示UTF-8可以编码的所有代码点。注意:除了与Win9x版本的Windows兼容外,Windows API不使用
TCHAR
S。如果您的目标是任何受支持的Windows版本(或任何不受支持的基于Windows NT的版本),您只需传递wchar\u t*
,而不是TCHAR*
(除了极少数例外,这需要char*
)。P.P.S.:在Windows上处理UTF-8的正确方法是在数据进入应用程序时转换为UTF-16(套接字、文件、管道等),并在离开应用程序时转换为UTF-8。在应用程序内部应该只有UTF-16编码的字符串数据。少数例外是内部Windows API,它只处理ANSI字符串(如)另一种观点是,当访问Windows API函数时,将所有东西保持为UTF-8,并转换为UTF-16。参见和.C++,这是所有问题;C.@ IcTestTable中的问题更难解决:这是一个坏建议,它既不包含编写便携代码,也不包含数据流的干净的往返处理,这些数据文件可能包含非UTF-8垃圾。(这是垃圾,但不应该被你的程序破坏)。@IanAbbott:这个问题在普通C中很容易解决(或者很快就会解决)。不,只有两种情况。一种是直接的(UTF-8到UTF-16),另一种是不可能的(UTF-8到MBCS).MBCS不能表示UTF-8可以编码的所有代码点。P.S.:Windows API不使用TCHAR
S,除非与Win9x版本的Windows兼容。如果您的目标是任何受支持的Windows版本(或任何不受支持的基于Windows NT的版本),您只需通过wchar\u t*
来代替TCHAR*
(除极少数例外情况外,需要char*
)。P.P.S.:在Windows上处理UTF-8的正确方法是在数据进入应用程序(套接字、文件、管道等)时转换为UTF-16,并在离开应用程序时转换为UTF-8。在应用程序内部应该只有UTF-16编码的字符串数据。少数例外是内部Windows API,它只处理ANSI字符串(如)另一种观点是,当访问Windows API函数时,将所有东西保持为UTF-8,并转换为UTF-16。参见和.C++,这是所有问题;C.@ IcTestTable中的问题更难解决:这是一个坏建议,它既不包含编写便携代码,也不包含数据流的干净的往返处理,这些数据文件可能包含非UTF-8垃圾。(这是垃圾,但不应该被你的程序破坏)。@IanAbbott:这个问题在普通C语言中很容易(或者很快就会)用它解决。