【发布时间】:2017-07-24 22:05:41
【问题描述】:
我有一个非常大(数百万行)的应用程序,它是使用 MBCS(代码页 1252)开发的,并假设所有字符串都是 char* 并且每个字符只有一个字节。我们现在正在扩展我们的语言集,需要迁移到 Unicode。由于 UTF-8 以 1 字节为增量工作,因此这似乎很合适。按照惯例,我们希望以最少的代码更改来进行此更改。我们不想将所有内容都更改为 wchar 或 _TCHAR,并且如果我们可以提供帮助,则必须修改每个源文件的编码方式。
使用这些外来字符的唯一方法是用户在字段中输入它们,例如名称。然后根据需要将包含这些字符的字符串保存到文件中并且不进行操作。稍后读取文件并显示内容。假设源代码中没有使用 cp1252 以外的字符(即汉字等),我们是否需要对大部分源代码进行任何更改,或者我们可以将其保留为 char* 并让可能的 multi -byte 字符通过系统直到它们到达显示它们的 UI?
该应用程序是在 Visual Studio 2015 上使用 MFC 开发的。
【问题讨论】:
-
Win32 API(大部分)不支持 UTF-8。因此,即使您决定在内存中的字符串中使用 UTF-8,在将它们传递给/从 Win32 API 函数传递时,您也必须在运行时将它们在 UTF-16 之间转换。而且您将不得不使用基于 Unicode 的 UI。这将比一开始在任何地方都使用 Unicode 字符串进行更大的代码更改。如果您使用基于
TCHAR和TCHAR的API,那么最少 量的代码更改已经完成,但如果您直接使用char,则情况并非如此。
标签: unicode visual-studio-2015 utf-8 mbcs