问题标签 [widechar]

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 回答
41832 浏览

c++ - printf("%s")、printf("%ls")、wprintf("%s") 和 wprintf("%ls") 有什么区别?

考虑这个示例程序:

这个的输出是:

我在想:

  1. 为什么不打印 3 和 4?
  2. 1 & 3 和 2 & 4 有什么区别?
  3. 如果narrowstr是 UTF8 和widestrUTF16 有什么区别吗?
0 投票
1 回答
11122 浏览

c - 在 C 中理解和编写 wchar_t

我目前正在printf()为学校项目重写(部分)功能。总的来说,我们需要用几个标志、转换、长度修饰符来重现函数的行为......

我剩下要做的唯一一件让我陷入困境的事情就是标志%C/ %S(或%lc/ %ls)。

到目前为止,我已经收集到wchar_t一种可以将字符存储在一个以上字节上的类型,以便接受更多的字符或符号,因此几乎与所有语言兼容,无论它们的字母和特殊字符如何。

但是,我无法找到任何关于wchar机器外观的具体信息,它的实际长度(这显然取决于包括编译器、操作系统......在内的几个因素)或如何实际编写它们。

先感谢您

请注意,我们被允许使用的功能是有限的。唯一允许的函数是write()malloc()free()exit()。我们必须能够自己编写任何其他必需的功能。

总结一下,我在这里要问的是一些关于如何解释和“手动”编写任何wchar_t字符的信息,使用尽可能少的代码,以便我可以尝试理解整个过程并自己编写代码。

0 投票
2 回答
474 浏览

c++ - 获取进程句柄名称

我正在尝试获取进程句柄的名称。我遍历所有句柄的列表并尝试获取如下名称:

我的问题从WideToChar(objectName, nameInfo->Buffer);我到达时开始while(Source[i] != '\0')
然后我会收到以下错误

0 投票
0 回答
80 浏览

unicode - 使用 DCG 解析时处理宽字符

当我深入研究 DCG 的使用时,我发现自己被宽字符所阻碍。

我正在尝试编写一个(或多或少)通用标记器,并针对Macbeth 的这个文本文件(我在最近的 /r/dailypogrammer 挑战中遇到)测试它的勇气。隐藏在文本中的这里和那里是宽字符Ã

很长一段时间我都不知所措,无论我尝试什么调整,tokenizer 都只是回答“错误”。当然,我终于明白了:因为我的 DCG 规则试图通过诉诸 来标记他们的数据,将code_type/2“单词”分隔为 type 的连续字符csym,用 分隔标点符号char_type(C, punct)等,它们在遇到 时失败Ã,表示为[195, 131]

发现问题后,我不知道如何干净地处理这些代码序列。理想情况下,我想将所有宽度的图形字符分组为“单词”的一部分,除非它们是明确的标点符号。我尝试过在各种不同的编码下读取文件,但这似乎没有帮助,大概是因为我仍然依赖code_type/2.

目前,我设计了以下令人讨厌的解决方案作为任何非 ascii 字符的包罗万象:

但我敢肯定,或者至少我希望,有更好的方法来解决这个问题。

其他人如何处理这种情况?有标准方法吗?我忽略了一些简单的事情吗?

0 投票
1 回答
96 浏览

c - C在iTerm2中以颜色打印宽字符

我有一个宽字符wchar_t*字符串,我想用彩色打印它write(3)

像这样的东西:

打印[31mBLA[0m没有颜色。

像这样的东西:

正确打印BLAred.

知道如何打印wide char彩色字符串吗?

编辑:它似乎可以正确打印Terminal.app但不iTerm2知道为什么?

0 投票
0 回答
874 浏览

c - C从字符串中扫描unicode字符

我有 wchar_t 类型的字符串,其中包括 unicode 字符,如“ş、ç、ü、..”我需要从字符串中一个一个地获取这个字符,但我无法用 sscanf 读取它们。我找不到替代功能。所以我该怎么做?

0 投票
0 回答
240 浏览

c - _tcslen 成为对 _mbslen 的调用,即使未定义 _UNICODE 和 _MBCS

第一次在这里的用户。

我试图更好地理解 Unicode、utf-8 等。目前我正在从 Windows 命令提示符处执行此操作。

可以发布在 Visual Studio 中看到的反汇编转储吗?

文档声明 _mbslen 仅在定义 _MBCS 时使用时,我无法弄清楚为什么_tcslen(streng)编译成调用。_mbslen

我编译cl -Zi main.c时,devenv main.exe我可以确认_UNICODE 和_MBCS 都不是用该行定义的UINT cs = UC | UM;(cs 是0xa)。

如果我删除定义 UNICODE 的第一行并将命令提示符中的代码页设置为 65001,则一切正常,因为我使用 utf-8 保存源文件。如果我wcslen(streng)在字符串中保留 UNICODE 定义但硬编码和代码点,它也可以工作。这让我相信,即使 _tcslen 变成 wcslen 它也不会起作用,除非我将 Unicode 代码点硬编码到字符串中。但这不是重点。我想知道为什么编译器选择调用_mbslen而不是wcslen。

0 投票
1 回答
71 浏览

c - 源代码定义宽字符字符串和跨平台

在 Visual Studio 源代码定义的字符串下,如L"abc"result 为具有 2 字节宽字符的 C 字符串。

  • Linux 编译器呢?是否也可以使用 L"" 语法?
  • 如果是,是 C 字符串 linux 宽字符(即 4 字节宽)的字符吗?
  • 是否有一种“交叉编译器”方式来定义 UCS-2 或 UTF-16 编码的 unicode 字符串?

谢谢你。:)

编辑:忘了提到我不能使用 C++11。

0 投票
0 回答
227 浏览

c++ - C++ 输出日文字符

我正在记忆从日本游戏中读取字符串,我试图在控制台窗口中显示它并将字符串复制到剪贴板。到目前为止,我已经设法在控制台中显示它,但是每当我尝试将它复制到我的剪贴板时,字符串就会被扭曲。我试图搜索这个问题,但大多数人都在努力在控制台中显示字符串,我对此没有任何问题。

日文文本在cout之后正确显示在控制台中,但是正在存储的剪贴板值看起来像:y•zuƒXƒ~。我不知道为什么当我将它输出到控制台时它工作正常,因为从内存中读取的字符串也像它出现在剪贴板中一样被扭曲了。这是剪贴板功能,如果它会有所帮助:

我也尝试过使用wchar_twstring处理字符串,但我得到的符号与预期的完全不同。

如果重要的话,我的系统区域设置当前设置为日语。

我在这里做错了什么?

0 投票
2 回答
46 浏览

c - fwprintf 什么时候返回负数?

我在任何地方的文档中都找不到它,我所做的只是发现它在发生错误时返回一个负数。会是什么错误?

错误发生在如下所示的函数中:

此外,此错误仅在程序执行期间出现并停留在那里,就好像达到某种限制一样。