将VS MBCS源代码expression式转换为Unicode

我想将我的Visual Studio项目从MBCS转换为Unicode CS。 但我有我的源代码中的900个常量字符数组,有没有一种自动的方式来做到这一点? 一行一行地做很多事情。 在做我指的是添加_T(“asd”)“asd”。

这是没有办法的。

除非使用L来告诉编译器始终将其编码为Unicode(WCHAR / wide字符串),否则使用_T宏进行编码,而字符串文本被解释/编码为“char *”,具体取决于“字符集“被设置为ANSI / MBCS或Unicode ..

你可能会试图用“文件|高级保存选项”来改变你的源文件的编码为Unicode …认为这将改变你的字符串文字是如何编码的…但是没有…他们仍然被视为窄弦。

有些链接可能有助于理解选项。


最好的办法是在Visual Studio中编写一个可以运行的“宏”,它将通过包含字符串文本的源代码文件集,并向这些字符串添加_T( )L前缀。

宏是多么的复杂,取决于你…但应该有可能让宏模式匹配一​​个字符串,然后要求你确认是否前缀/包装字符串文字(用L或_T( ))….因为你不想转换你的源代码中的所有字符串…因为有些需要保持窄的字符串。


另一种方法是使用“查找”对话框查找字符串,然后直观地看看是否需要修改,然后手动进行修改。

  • 搜索字符串文字

最后,您可以利用“翻译工具”,它遵循“源文件中字符串的就地本地化替换,然后重新编译”本地化技术(与“将字符串提取到资源”技术相反)。这是比较常见的)。 我知道有这样的工具,可以从源文件中提取字符串…建立这些字符串的表/数据库…然后得到翻译,然后重新插入….(其实我写了东西在过去那样做)。 也许你可以找到一个工具来做到这一点……但稍微修改它,插入字符串时插入L前缀。

事实上,如果你不费吹灰之力将应用程序编码为Unicode,那么我可以想象在某些时候,你将打算支持应用程序的不同本地化…所以你可以做的就是将所有的字符串移到资源…和资源将它们保存为Unicode …您必须修改代码才能从资源中加载字符串等。

我在VIM中做了一个正则表达式替换,在一个混合了“abc”,_T(“abc”)和其他字符串的大型项目中这样做:

 :%s/\([^T][^(L]\)"\([^"()]*\)"/\1_T("\2")/g 

然后我使用版本控制(TortoiseSVN-diff)来检查更改,并在必要时恢复它们。 YMMV,但这是我的项目最快的选择。