问题标签 [mbcs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1310 浏览

unicode - 从 Windows MBCS 转换为 UTF-8

我有一个非常大(数百万行)的应用程序,它是使用 MBCS(代码页 1252)开发的,并假设所有字符串都是 char* 并且每个字符只有一个字节。我们现在正在扩展我们的语言集,需要迁移到 Unicode。由于 UTF-8 以 1 字节为增量工作,因此这似乎很合适。按照惯例,我们希望以最少的代码更改来进行此更改。我们不希望将所有内容都更改为 wchar 或 _TCHAR,如果我们可以提供帮助,我们必须修改每个源文件的编码方式。

使用这些外来字符的唯一方法是用户在字段中输入它们,例如名称。然后根据需要将包含这些字符的字符串保存到文件中并且不进行操作。稍后读取文件并显示内容。假设源代码中没有使用 cp1252 以外的字符(即汉字等),我们是否需要对大部分源代码进行任何更改,或者我们可以将其保留为 char* 并让可能的 multi -byte 字符通过系统直到它们到达显示它们的 UI?

该应用程序是在 Visual Studio 2015 上使用 MFC 开发的。

0 投票
0 回答
32 浏览

c# - VSO/VSTS 和 MBCS

我有一个旧的 VS2013 解决方案(20 年代 C++ 和 C# 项目),需要迁移到 Visual Studio Team Services (VSTS)。不幸的是,一些项目使用多字节字符集(MBCS)。我使用了 VSTS 托管构建,但失败并出现以下错误:

更改为 Unicode 将需要修改一大堆项目(以及一些我们没有源代码的 dll/lib),因此不太可行。
我只是想知道有没有办法在构建过程中添加 MBCS 支持?

0 投票
2 回答
3287 浏览

python - MBCS 编码未知

我正在尝试在 Python 中打开一个带有 MBCS 编码的文件,但出现错误。

如果我写:

我得到:

有没有办法安装这个编解码器?谢谢!

0 投票
1 回答
583 浏览

c++ - Visual C++ - UTF-8 - CA2W 后跟 CW2T 和 MBCS - 可能是个坏主意?

我正在使用一个在const char*类型中生成 UTF-8 空终止字符串的库。示例包括:

我想将这两种const char*类型转换为CString

为此,我正在使用我制作的以下功能:

该功能似乎做了我想要的(至少对于这两种情况)。但是,我想知道:使用 CA2W 宏,然后使用 CW2T 是否是个好主意?我这样做是在做某种有损转换吗?有什么我需要担心的副作用吗?

其他一些细节:

  1. 我正在使用 Visual Studio 2015
  2. 我的应用程序是使用使用多字节字符集编译的
0 投票
1 回答
369 浏览

c++ - MFC CEdit 将非 ascii 字符转换为 ascii

我们有一个 MFC Windows 应用程序,最初是用 VC++ 6 编写的,多年来针对更新的 IDE 进行了更新,目前在 VS2017 中开发。

该应用程序是用 MBCS(不是 unicode)构建的。尝试切换到 Unicode 会导致 3806 编译错误,这可能只是冰山一角。

但是,我们希望能够使用不同的代码页运行应用程序,即。1250(中欧)。

我尝试构建一个小型测试应用程序,并设法让它与特殊字符 (čćšđž) 一起工作。我通过使用代码页 1250 将对话框字体设置为 Microsoft Sans Serif 来做到这一点。我们的应用程序中的相同方法不起作用。注意:我们应用程序中的对话框是动态创建的,字体是使用 SetFont 设置的。

在这两个应用程序中处理特殊字符的方式有所不同。

  • 在测试应用程序中,特殊字符显示在编辑控件中,GetWindowsText 检索正确的字节。但是,尝试从其他语言编写一些字符时,会将它们呈现为“????”。
  • 在我们的应用程序中,所有特殊字符都被正确渲染,但 GetWindowText(或 WM_GETTEXT)将特殊字符转换为类似的 ascii 对应物(čćđ -> ccd)。

我相信我们应用程序中的 Edit 控件显示 Unicode 文本,但 GetWindowText 将其转换为 ascii。

有谁知道这里发生了什么,以及我该如何解决?

注意:我知道如何将项目转换为 Unicode。我们目前选择不为此投入资源,因为它可能需要数周或数月才能实施。问题是我如何让它与 MBSC 一起工作,以及为什么编辑控件将 Č 转换为 C。

0 投票
1 回答
64 浏览

unicode - 是否保证 mbcs 编码中的尾随字节在特定范围内?

我需要读取包含任意 MBCS 编码字符串的文本文件。文件格式(简化)如下:

其中 CODEPAGE 可以是任何 MBCS 代码页:UTF-8、cp1251(西里尔文)、cp932(日语)等。

我无法在一次调用 MultiByteToWideChar 时解码整个文件。我需要提取引号之间的字符串,或者直到空格或回车符,然后在提取的字符串上调用 MultiByteToWideChar。

但是在 MBCS(多字节编码方案)中,一个字符可以用多个字节表示。如果我想在多字节编码文件中找到拉丁语“A”,我不能只搜索代码 65,因为 65 可能是某些编码序列中的尾随字节。

所以我不确定是否允许在 MBCS 字符串中搜索 '"' 或空格或 CR。我浏览了几个代码页(例如中文 936 代码页:https ://ssl.icu-project.org/icu- bin/convexp?conv=windows-936-2000&s=ALL),据我所知,所有尾随字节都从 0x40 开始,因此扫描文件中的标点符号是安全的。但是对于任何代码页,是否有一些保证?

0 投票
1 回答
352 浏览

python - 如何在 Linux 上的 Python 中使用 mbcs 编解码器读取 csv 文件?

我正在尝试使用西欧(Windows)编码读取 CSV 文件

此代码在 Windows 上运行良好,但在 Linux 18.04 上运行良好。(错误:未知编码:mbcs)确实,在编解码器python文档中,我们有信息:

是否有另一种方法/名称可以在 Linux 上的 python 中解码我的文件?(我有数千个文件,所以我无法在 Excel 上另存为)

0 投票
2 回答
798 浏览

visual-studio - 每次我构建一个虚幻引擎项目时,vs都会发出这样的警告:无法获取MBCS字符串

编译没有问题,但是这个警告一直显示在输出窗口上。这只是一件与我正在制作的游戏无关的小事吗?还是以后会出问题?我用谷歌搜索了这个警告,但我找不到任何东西。我为解决它所做的是将引擎版本降级到 4.24,重新安装 VS 和 UE4,安装 MSVC v141、v140(版本 2017、2015)。

0 投票
0 回答
44 浏览

interbase - 无法在运行时使用带参数的查询创建用户

我正在使用 C++ Builder 10.2.3 (Rad Studio Tokyo 10.2.3) 和 Interbase 2017 我需要在运行时为我的用户注册创建用户。如果我在运行时创建查询,在这种情况下没有参数,它可以工作。但这会产生 MBCS 字符的问题,我将在后面解释。如果我在设计时使用参数创建查询并尝试在运行时设置参数。我收到以下错误消息:

我正在使用的查询如下:

我在运行时替换了查询的第一行,所以没有字符。毕竟,Interbase 无法处理 USERNAME 中的 MBCS 字符。我需要使用带参数的查询,因为我的应用程序处理多字节字符 (MBCS),例如中文和日文。这是确保在 Interbase 中正确转换为 UTF8 的唯一选择。因为如果没有完成 MBCS 字符的转换,我就无法备份和恢复我的数据库。当我尝试使用名字和姓氏中的 MBCS 字符进行恢复时,我收到一条错误消息,指出 Interbase 无法在字符集之间进行音译。

根据错误消息,在我看来它无法识别查询参数。我尝试了“TIBQuery”和“TIBSQL”。同样的问题。也不可能使用存储过程。不识别创建词。那么,如何解决呢?

0 投票
1 回答
74 浏览

c++ - 读取带有德语文本的 *.txt 文件,在我的 GUI 中显示它——带有变音符号的字符不正确

我的世界是:MFC,Visual Studio C++,使用 MBCS 字符集。通常使用 CString 作为我最喜欢的字符串类型,但有时也使用 std:string。

我可以将德语单词放在我的字符串表中,它们会很好地显示在 GUI 中 - 充满可爱的变音符号和其他口音。但是,如果我有一个包含带有变音符号的德语文本的 *.txt 文件,当我读入它(使用 CStdioFile)然后在 GUI 中显示它时,变音符号和其他特殊字符不能很好地打印,而是出现 für 之类的东西(应该是“毛皮”,在 u 上有一个变音符号)。

如何阅读 *.txt 德语文本文件并在 GUI 中显示?以为这很简单。我可以发誓我以前做过,没有问题。在此先感谢您的帮助!