转换旧的Visual Studio C++;从多字节字符集投影 我想把一个旧的C++ MFC项目从Visual Studio 2005转移到一个更新的版本。该项目使用了一个多字节字符集,据我所知,该字符集在当前的VisualStudio中不再受支持。因此,第一步应该是使项目独立于角色集。一位同事告诉我,如果我在每个文本周围放置一个宏\u T(),我就可以做到这一点。 不幸的是,该项目包含大量静态文本,添加宏需要几周的时间

转换旧的Visual Studio C++;从多字节字符集投影 我想把一个旧的C++ MFC项目从Visual Studio 2005转移到一个更新的版本。该项目使用了一个多字节字符集,据我所知,该字符集在当前的VisualStudio中不再受支持。因此,第一步应该是使项目独立于角色集。一位同事告诉我,如果我在每个文本周围放置一个宏\u T(),我就可以做到这一点。 不幸的是,该项目包含大量静态文本,添加宏需要几周的时间,c++,visual-studio,mfc,multibyte-characters,C++,Visual Studio,Mfc,Multibyte Characters,没有别的办法了吗?不幸的是,没有别的办法了。您可以尝试使用正则表达式或一些文本编辑器(如sed)自动编辑文本 但就我个人而言,我更愿意手动检查所有代码,确保没有留下与多字节字符相关的代码:使用\u tcslen而不是strlen,\u TCHAR而不是char,等等 其他变体要考虑的是使代码显式使用WixCARS: WCSCLIN < /C> >而不是 STRLEN , WCARGYT 而不是 char , L“某个字符串”< /C> >而不是(“某些字符串”)< /C> >等 UPD:我还发现

没有别的办法了吗?

不幸的是,没有别的办法了。您可以尝试使用正则表达式或一些文本编辑器(如
sed
)自动编辑文本

但就我个人而言,我更愿意手动检查所有代码,确保没有留下与多字节字符相关的代码:使用
\u tcslen
而不是
strlen
\u TCHAR
而不是
char
,等等

其他变体要考虑的是使代码显式使用WixCARS:<代码> WCSCLIN < /C> >而不是<代码> STRLEN ,<代码> WCARGYT 而不是<代码> char ,<代码> L“某个字符串”< /C> >而不是<代码>(“某些字符串”)< /C> >等


UPD:我还发现了一些好消息“在VC2017中,MFC已从MFC中删除了弃用警告[MFC对MBC的支持已弃用],我们将在未来的版本中继续提供MBC支持。”(),因此您可能可以保持原样。

不幸的是,没有其他方法。您可以尝试使用正则表达式或一些文本编辑器(如
sed
)自动编辑文本

但就我个人而言,我更愿意手动检查所有代码,确保没有留下与多字节字符相关的代码:使用
\u tcslen
而不是
strlen
\u TCHAR
而不是
char
,等等

其他变体要考虑的是使代码显式使用WixCARS:<代码> WCSCLIN < /C> >而不是<代码> STRLEN ,<代码> WCARGYT 而不是<代码> char ,<代码> L“某个字符串”< /C> >而不是<代码>(“某些字符串”)< /C> >等


UPD:我还发现了一些好消息“在VC2017中,MFC已从MFC中删除了弃用警告[MFC对MBC的支持已弃用],我们将在未来的版本中继续提供MBC支持。”(),因此您可能可以保持原样。

这个问题不清楚。“[A]我知道不再支持的多字节字符集”听起来像是有一个特定的字符集的支持被放弃了,但我怀疑你真的想问一下MBCSE的总体支持情况。此外,由于它讨论的是IDE而不是编译器和框架的支持,因此我想知道您关心的是源文件(或.vcproj文件)是否保存在MBCS中,还是它实际上是一个代码问题。MBCS仍然通过核心操作系统和MFC受支持。使用断字符编码可能不可取,而且已经二十年没有了,但它仍然受到支持。您需要澄清“不再受支持”是什么意思。
\u T()
宏的发明是为了允许为Windows 95和Windows NT编译几乎相同的代码库。现在添加这些似乎有点晚了。从技术上讲,除了为您将要使用的任何版本的Visual Studio/MFC下载MBCS库之外,您不需要做任何事情。它仍然受到支持,只是没有立即开箱即用。其次,您应该能够编写一个脚本或类似的脚本来转换为宽字符——确保您处于源代码控制之下。我建议把字符串放在参考资料中,这样如果你想翻译它,你就可以了。@Phil1970:Windows上的标准是UTF-16。UTF-8适用于数据交换(例如,将文件写入磁盘或网络套接字,从web服务器提供数据服务等)。说到Windows编程,你需要一个很好的理由不使用UTF-16。这个问题还不清楚。“[A]我知道不再支持的多字节字符集”听起来像是有一个特定的字符集的支持被放弃了,但我怀疑你真的想问一下MBCSE的总体支持情况。此外,由于它讨论的是IDE而不是编译器和框架的支持,因此我想知道您关心的是源文件(或.vcproj文件)是否保存在MBCS中,还是它实际上是一个代码问题。MBCS仍然通过核心操作系统和MFC受支持。使用断字符编码可能不可取,而且已经二十年没有了,但它仍然受到支持。您需要澄清“不再受支持”是什么意思。
\u T()
宏的发明是为了允许为Windows 95和Windows NT编译几乎相同的代码库。现在添加这些似乎有点晚了。从技术上讲,除了为您将要使用的任何版本的Visual Studio/MFC下载MBCS库之外,您不需要做任何事情。它仍然受到支持,只是没有立即开箱即用。其次,您应该能够编写一个脚本或类似的脚本来转换为宽字符——确保您处于源代码控制之下。我建议把字符串放在参考资料中,这样如果你想翻译它,你就可以了。@Phil1970:Windows上的标准是UTF-16。UTF-8适用于数据交换(例如,将文件写入磁盘或网络套接字,从web服务器提供数据服务等)。说到Windows编程,您需要一个很好的理由不使用UTF-16。