【问题标题】:Convert VS MBCS source code expressions to Unicode将 VS MBCS 源代码表达式转换为 Unicode
【发布时间】:2012-08-29 03:06:49
【问题描述】:

我想将我的 Visual Studio 项目从 MBCS 转换为 Unicode CS。但是我的源代码中有 900 个 const char 数组,有没有自动的方法呢?一行一行地做很多事情。 在这样做时,我指的是添加 _T("asd") 到 "asd"。

【问题讨论】:

  • 只要每行有一个字符串,就可以使用正则表达式进行搜索和替换。如果每行有多个字符串,则必须在每个无效搜索结果中单击“否”。尝试搜索正则表达式:{[^L]}{:q} 替换为:\1L"\2"
  • 在VS中搜索可以使用正则表达式????哇。

标签: .net windows visual-studio visual-c++


【解决方案1】:

我做了一个正则表达式替换,我在 VIM 中使用它在一个混合了 "abc"、_T("abc") 和其他字符串的大型项目中执行此操作:

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

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

【讨论】:

    【解决方案2】:

    没有办法解决这个问题。

    字符串文字被解释/编码为“char *”,除非您使用L 告诉编译器始终将其编码为Unicode(WCHAR/宽字符串),或者您使用_T 宏对其进行编码取决于“字符集”是设置为 ANSI/MBCS 还是 Unicode..

    您可能很想通过“文件|高级保存选项”将源文件的编码更改为 Unicode...认为这会改变您的字符串文字的编码方式...但是不...它们仍然会被视为窄字符串。

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


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

    您制作宏的复杂程度取决于您...但应该可以让宏与字符串进行模式匹配,然后询问您是否确认是否为字符串文字添加前缀/包装(使用 L或 _T())....因为您不想转换源中的所有字符串...因为有些字符串需要保留为窄字符串。


    另一个选项是您可以使用“查找”对话框查找字符串,然后直观地查看它们是否需要修改并手动进行修改。


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

    事实上,如果您不厌其烦地使您的应用程序 Unicode...那么我想在某些时候您将打算支持您的应用程序的不同本地化...所以您可以做的就是移动您的所有字符串到资源...并且资源将它们保存为 Unicode...您必须修改代码才能从资源等中加载字符串。

    【讨论】:

    • 哇。非常感谢您如此详尽的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2015-01-15
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多