我想将我的Visual Studio项目从MBCS转换为Unicode CS。 但我有我的源代码中的900个常量字符数组,有没有一种自动的方式来做到这一点? 一行一行地做很多事情。 在做我指的是添加_T(“asd”)“asd”。
这是没有办法的。
除非使用L
来告诉编译器始终将其编码为Unicode(WCHAR / wide字符串),否则使用_T
宏进行编码,而字符串文本被解释/编码为“char *”,具体取决于“字符集“被设置为ANSI / MBCS或Unicode ..
你可能会试图用“文件|高级保存选项”来改变你的源文件的编码为Unicode …认为这将改变你的字符串文字是如何编码的…但是没有…他们仍然被视为窄弦。
有些链接可能有助于理解选项。
Visual C ++:将传统的C和C ++字符串代码迁移到Unicode世界
http://www.codeproject.com/Articles/2995/The-Complete-Guide-to-C-Strings-Part-I-Win32-Chara
最好的办法是在Visual Studio中编写一个可以运行的“宏”,它将通过包含字符串文本的源代码文件集,并向这些字符串添加_T( )
或L
前缀。
宏是多么的复杂,取决于你…但应该有可能让宏模式匹配一个字符串,然后要求你确认是否前缀/包装字符串文字(用L或_T( ))….因为你不想转换你的源代码中的所有字符串…因为有些需要保持窄的字符串。
另一种方法是使用“查找”对话框查找字符串,然后直观地看看是否需要修改,然后手动进行修改。
最后,您可以利用“翻译工具”,它遵循“源文件中字符串的就地本地化替换,然后重新编译”本地化技术(与“将字符串提取到资源”技术相反)。这是比较常见的)。 我知道有这样的工具,可以从源文件中提取字符串…建立这些字符串的表/数据库…然后得到翻译,然后重新插入….(其实我写了东西在过去那样做)。 也许你可以找到一个工具来做到这一点……但稍微修改它,插入字符串时插入L前缀。
事实上,如果你不费吹灰之力将应用程序编码为Unicode,那么我可以想象在某些时候,你将打算支持应用程序的不同本地化…所以你可以做的就是将所有的字符串移到资源…和资源将它们保存为Unicode …您必须修改代码才能从资源中加载字符串等。
我在VIM中做了一个正则表达式替换,在一个混合了“abc”,_T(“abc”)和其他字符串的大型项目中这样做:
:%s/\([^T][^(L]\)"\([^"()]*\)"/\1_T("\2")/g
然后我使用版本控制(TortoiseSVN-diff)来检查更改,并在必要时恢复它们。 YMMV,但这是我的项目最快的选择。