Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将VS MBCS源代码表达式转换为Unicode_.net_Windows_Visual Studio_Visual C++ - Fatal编程技术网

.net 将VS MBCS源代码表达式转换为Unicode

.net 将VS MBCS源代码表达式转换为Unicode,.net,windows,visual-studio,visual-c++,.net,Windows,Visual Studio,Visual C++,我想将我的visual studio项目从MBCS转换为Unicode CS。但是我的源代码中有900个const char数组,有没有一种自动的方法呢?一行一行地做这件事非常多。 我这样做是指在“asd”中添加“asd”。这是没有办法的 除非使用L告诉编译器始终将字符串文字编码为Unicode(WCHAR/wide string),或者根据“字符集”设置为ANSI/MBCS还是Unicode,使用\T宏对其进行编码,否则字符串文字将被解释/编码为“char*” 您可能会尝试将源文件的“File

我想将我的visual studio项目从MBCS转换为Unicode CS。但是我的源代码中有900个const char数组,有没有一种自动的方法呢?一行一行地做这件事非常多。
我这样做是指在“asd”中添加“asd”。

这是没有办法的

除非使用
L
告诉编译器始终将字符串文字编码为Unicode(WCHAR/wide string),或者根据“字符集”设置为ANSI/MBCS还是Unicode,使用
\T
宏对其进行编码,否则字符串文字将被解释/编码为“char*”

您可能会尝试将源文件的“File | Advanced Save Options”编码更改为Unicode…认为这将改变字符串文字的编码方式…但不会…它们仍将被视为窄字符串

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


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

宏的复杂程度取决于您自己……但是,应该可以让宏模式匹配字符串,然后要求您确认是否为字符串文本添加前缀/换行符(使用L或_T())……因为您不想转换源中的所有字符串……因为有些字符串需要保持为窄字符串


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


最后,您可能能够利用“翻译工具”,它遵循“源文件中字符串的就地本地化替换,然后重新编译”本地化技术(与“将字符串提取到资源”技术相对,后者更常见)。我知道有这样的工具,可以从源文件中提取字符串…构建这些字符串的表/数据库…然后进行翻译,然后重新插入…(事实上,我以前写过这样的东西)。也许你可以找到一个工具,可以做到这一点…但稍微修改一下,在重新插入字符串时插入L前缀

其实,,如果您不厌其烦地将应用程序设置为Unicode…那么我可以想象,在某个时刻,您将打算支持应用程序的不同本地化…因此,您可以做的是将所有字符串移动到资源中…资源将其保存为Unicode…您必须修改代码以从资源中加载字符串,等等


我做了一个正则表达式替换,我在VIM中使用它来完成一个大型项目,该项目混合了“abc”、“T”(“abc”)和其他字符串:

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

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

Wow。非常感谢您如此详尽的回答。只要每行有一个字符串,您就可以使用正则表达式进行搜索和替换。如果每行有多个字符串,则必须在每个无效搜索结果处单击“否”。尝试搜索正则表达式:{[^L]}{:q}替换为:\1L“\2”在VS中搜索时可以使用正则表达式????哇!