问题标签 [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 投票
3 回答
4150 浏览

c++ - 在 C++ 中将 MBCS 流转换为 UTF-8,反之亦然

我正在使用 Visual C++ (VS2005) 并以多字节字符集 (MBCS) 编译项目。但是,程序需要通过 XMLRPC 与 webapp(utf-8 格式)进行通信。所以我在想也许我可以在内部使用 MBCS 并将字符串转换为 utf-8,然后再将它们发送到 xmlrpc 模块并在从 webapi 接收后将它们转换回 MBCS。

我想知道在 VC++ 中转换 MBCS 和 UTF-8 的最佳方式是什么?

谢谢大家。

0 投票
5 回答
5634 浏览

encoding - 什么多字节字符集以 0x7F 开头,长度为 4 个字节?

我正在尝试获取一些旧代码来正确显示中文字符。我尝试使用的一种字符编码以 0x7F 开头,长度为 4 个字节(包括 0x7F 字节)。有谁知道这是哪种编码以及我在哪里可以找到它的信息?谢谢..

更新:我还必须使用一些日语编码,每个字符都以 0xE3 开头,长度为三个字节。如果我在 Windows 中选择日语语言环境,它会正确显示在我的计算机上,但是,它不会在我们的应用程序中正确显示。但是,如果选择了除日语以外的任何其他语言环境,我什至无法正确查看文件名。所以我猜这种编码不是Unicode。有人知道这是什么吗?是ANSI吗?是 Shift JIS 吗?

对于中文,我用 Unicode 和 UTF-8 字符对其进行了测试,我得到了相同的模式;0x7F 后跟三个字节。Unicode 和 UTF-8 是一样的吗?

0 投票
4 回答
2294 浏览

c++ - MFC 应用程序到 Unicode/MBCS 的分段转换

我有一个大型 MFC 应用程序,我正在扩展它以允许多语言输入。目前我需要允许用户在单个对话框的编辑框中输入 Unicode 数据。

有没有办法在不为整个应用程序打开 UNICODE 或 MBCS 的情况下做到这一点?我现在只需要转换应用程序的一小部分。是否可以分段执行此操作,如果可以,如何执行?


澄清:我可以使用 ::GetWindowTextW() 从窗口中获取 Unicode 信息。我试图弄清楚如何允许用户在窗口中输入 Unicode 文本。目前,用户在 windows-1252 代码页之外键入的字符显示为“?”。有没有办法来解决这个问题?

0 投票
1 回答
526 浏览

.net - 如何在 API 中表示 Unicode 字符

这更像是一个 MBCS 问题而不是 Unicode 问题。我需要创建一个 API,它返回一个结构列表,每个实例都将一个 Unicode 字符作为其成员之一。这是在 .NET 中,所以你会认为我想要 UTF-16,但是对于亚洲字符,需要两个字符。返回 Unicode 字符时的最佳做法是什么?

  1. 使用 2 个 UTF-16 字符的数组 - 测试第一个字符,看看它是否是代理,有计数吗?
  2. 忽略代理问题,让调用者找出实际的字形编码跨越结构?
  3. 改用字符串,所以我不在乎它的长度是一个还是两个字符?
  4. 使用 UTF-32

人们通常为 UTF-8 做什么?我猜他们从不处理单个字符,并且所有内容都保存在字符串中(例如,在字符串中搜索字符实际上是通过查找子字符串来完成的)。也许是我的 C++ 程序员,但字符串似乎太重了。

我想我会做#3。别人做了什么?

0 投票
2 回答
1666 浏览

c++ - tchar 安全函数 -- UTF-8 常量的计数参数

我正在将一个库从 char 移植到 TCHAR。根据 MSDN,此片段的 count 参数是多字节字符数,而不是字节数。那么,我做对了吗?我在 VC9 中的项目属性说“使用 unicode 字符集”,我认为这是正确的,但我不知道这会如何影响我的计数参数。

“仅在 Windows 平台上受支持,_mbsncmp 和 _mbsnbcmp 是 strncmp 的多字节版本。_mbsncmp 将最多比较 count 个多字节字符,_mbsnbcmp 将最多比较 count 个字节。它们都使用当前的多字节代码页。

_tcsnccmp 和 _tcsncmp 分别是 _mbsncmp 和 _mbsnbcmp 对应的通用函数。_tccmp 等同于 _tcsnccmp。”

一个类似的问题是_tcslen vs _tcslen。

0 投票
4 回答
6257 浏览

windows - 为什么不允许 UTF-8 作为“ANSI”代码页?

Windows_setmbcp函数允许任何有效的代码页...

(不支持的 UTF-7 和 UTF-8 除外)

好的,不支持 UTF-7 是有道理的:字符具有非唯一的表示形式,这会带来复杂性和安全风险。

但为什么不是 UTF-8?

据我了解,Windows API 函数的“ANSI”版本将其参数转换为 UTF-16,调用等效的“W”函数,并将输出中的任何字符串转换为“ANSI”。这是我一直在手动做的。那么为什么 Windows 不能为我做呢?

0 投票
4 回答
39728 浏览

windows - Windows 上 MBCS 和 UTF-8 之间的区别

我正在阅读有关 Windows 上的字符集和编码的信息。我注意到 Visual Studio 编译器(用于 C++)中有两个编译器标志,称为 MBCS 和 UNICODE。它们之间有什么区别?我没有得到的是 UTF-8 在概念上与 MBCS 编码有何不同?另外,我在MSDN中找到了以下引用:

Unicode 是 16 位字符编码

这否定了我读到的关于 Unicode 的任何内容。我认为 unicode 可以使用不同的编码进行编码,例如 UTF-8 和 UTF-16。有人可以进一步阐明这种混乱吗?

0 投票
5 回答
8385 浏览

unicode - 如何知道 Unicode 字符的首选显示宽度(以列为单位)?

在 Unicode 的不同编码中,例如UTF-16leUTF-8,一个字符可能占用 2 或 3 个字节。许多 Unicode 应用程序不关心 Unicode 字符的显示宽度,就像它们都是拉丁字母一样。例如,在80列的文本中,一行应该包含40 个汉字或80 个拉丁字母,但大多数应用程序(如 Eclipse、Notepad++ 和所有知名的文本编辑器,如果有什么好的例外我敢说)只是计算每个汉字为 1 宽度为拉丁字母。这肯定会使结果格式丑陋且不对齐。

例如,tab-width 为 8 将得到以下丑陋的结果(将所有 Unicode 计为 1 显示宽度):

但是,预期的格式是(将每个汉字计算为 2 个宽度):

对字符显示宽度的不当计算使这些编辑器在进行制表符对齐、换行和段落重新格式化时完全无用。

虽然不同字体之间的字符宽度可能会有所不同,但在所有固定大小终端字体的情况下,汉字始终是双倍宽度。也就是说,不管字体如何,每个汉字最好以2宽显示。

一种解决方案是,我可以通过将编码转换为GB2312来获得正确的宽度,在GB2312编码中,每个汉字需要 2 个字节。但是,GB2312 字符集(或GBK字符集)中不存在某些 Unicode 字符。而且,一般来说,从编码大小(以字节为单位)计算显示宽度并不是一个好主意。

简单地将 Unicode 中 ( \u0080.. \uFFFF) 范围内的所有字符计算为 2 宽度也是不正确的,因为该范围内还有许多 1 宽度字符。

计算阿拉伯字母和韩文字母的显示宽度也很困难,因为它们是由任意数量的 Unicode 代码点构成一个单词/字符。

因此,Unicode 代码点的显示宽度可能不是整数,我认为没关系,它们在实践中可以基于整数,至少总比没有好。

那么,在 Unicode 标准中是否有任何与 char 的首选显示宽度相关的属性?或者任何Java库函数来计算显示宽度?

0 投票
2 回答
113 浏览

c++ - 在 MBCS 操作系统上运行单字节字符应用程序的风险

我有一个 MFC 应用程序,其中字符集为“未设置”。在具有多字节字符集代码页的操作系统上运行此应用程序有哪些风险?

0 投票
1 回答
1690 浏览

python - Windows下Python中的文件名格式化

我有两个不同的文件,称为:

'╠.txt' 和 '¦.txt'

这么简单的代码:

这将返回

我不明白为什么我得到╠字符的代码 0xA6 而不是 OxCC。我一直在尝试使用编码解码方法,但没有成功。我注意到 sys.getfilesystemencoding() 设置为 mbcs - 但我无法设法将其更改为 cp437 之类的东西。

很感谢任何形式的帮助。谢谢!