问题标签 [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.
c++ - printf("%s")、printf("%ls")、wprintf("%s") 和 wprintf("%ls") 有什么区别?
考虑这个示例程序:
这个的输出是:
我在想:
- 为什么不打印 3 和 4?
- 1 & 3 和 2 & 4 有什么区别?
- 如果
narrowstr
是 UTF8 和widestr
UTF16 有什么区别吗?
c - 在 C 中理解和编写 wchar_t
我目前正在printf()
为学校项目重写(部分)功能。总的来说,我们需要用几个标志、转换、长度修饰符来重现函数的行为......
我剩下要做的唯一一件让我陷入困境的事情就是标志%C
/ %S
(或%lc
/ %ls
)。
到目前为止,我已经收集到wchar_t
一种可以将字符存储在一个以上字节上的类型,以便接受更多的字符或符号,因此几乎与所有语言兼容,无论它们的字母和特殊字符如何。
但是,我无法找到任何关于wchar
机器外观的具体信息,它的实际长度(这显然取决于包括编译器、操作系统......在内的几个因素)或如何实际编写它们。
先感谢您
请注意,我们被允许使用的功能是有限的。唯一允许的函数是write()
、malloc()
、free()
和exit()
。我们必须能够自己编写任何其他必需的功能。
总结一下,我在这里要问的是一些关于如何解释和“手动”编写任何wchar_t
字符的信息,使用尽可能少的代码,以便我可以尝试理解整个过程并自己编写代码。
c++ - 获取进程句柄名称
我正在尝试获取进程句柄的名称。我遍历所有句柄的列表并尝试获取如下名称:
我的问题从WideToChar(objectName, nameInfo->Buffer);
我到达时开始while(Source[i] != '\0')
。
然后我会收到以下错误:
unicode - 使用 DCG 解析时处理宽字符
当我深入研究 DCG 的使用时,我发现自己被宽字符所阻碍。
我正在尝试编写一个(或多或少)通用标记器,并针对Macbeth 的这个文本文件(我在最近的 /r/dailypogrammer 挑战中遇到)测试它的勇气。隐藏在文本中的这里和那里是宽字符Ã
。
很长一段时间我都不知所措,无论我尝试什么调整,tokenizer 都只是回答“错误”。当然,我终于明白了:因为我的 DCG 规则试图通过诉诸 来标记他们的数据,将code_type/2
“单词”分隔为 type 的连续字符csym
,用 分隔标点符号char_type(C, punct)
等,它们在遇到 时失败Ã
,表示为[195, 131]
。
发现问题后,我不知道如何干净地处理这些代码序列。理想情况下,我想将所有宽度的图形字符分组为“单词”的一部分,除非它们是明确的标点符号。我尝试过在各种不同的编码下读取文件,但这似乎没有帮助,大概是因为我仍然依赖code_type/2
.
目前,我设计了以下令人讨厌的解决方案作为任何非 ascii 字符的包罗万象:
但我敢肯定,或者至少我希望,有更好的方法来解决这个问题。
其他人如何处理这种情况?有标准方法吗?我忽略了一些简单的事情吗?
c - C在iTerm2中以颜色打印宽字符
我有一个宽字符wchar_t*
字符串,我想用彩色打印它write(3)
像这样的东西:
打印[31mBLA[0m
没有颜色。
像这样的东西:
正确打印BLA
在red
.
知道如何打印wide char
彩色字符串吗?
编辑:它似乎可以正确打印Terminal.app
但不iTerm2
知道为什么?
c - C从字符串中扫描unicode字符
我有 wchar_t 类型的字符串,其中包括 unicode 字符,如“ş、ç、ü、..”我需要从字符串中一个一个地获取这个字符,但我无法用 sscanf 读取它们。我找不到替代功能。所以我该怎么做?
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。
c - 源代码定义宽字符字符串和跨平台
在 Visual Studio 源代码定义的字符串下,如L"abc"
result 为具有 2 字节宽字符的 C 字符串。
- Linux 编译器呢?是否也可以使用 L"" 语法?
- 如果是,是 C 字符串 linux 宽字符(即 4 字节宽)的字符吗?
- 是否有一种“交叉编译器”方式来定义 UCS-2 或 UTF-16 编码的 unicode 字符串?
谢谢你。:)
编辑:忘了提到我不能使用 C++11。
c++ - C++ 输出日文字符
我正在记忆从日本游戏中读取字符串,我试图在控制台窗口中显示它并将字符串复制到剪贴板。到目前为止,我已经设法在控制台中显示它,但是每当我尝试将它复制到我的剪贴板时,字符串就会被扭曲。我试图搜索这个问题,但大多数人都在努力在控制台中显示字符串,我对此没有任何问题。
日文文本在cout之后正确显示在控制台中,但是正在存储的剪贴板值看起来像:y•zuƒXƒ~。我不知道为什么当我将它输出到控制台时它工作正常,因为从内存中读取的字符串也像它出现在剪贴板中一样被扭曲了。这是剪贴板功能,如果它会有所帮助:
我也尝试过使用wchar_t和wstring处理字符串,但我得到的符号与预期的完全不同。
如果重要的话,我的系统区域设置当前设置为日语。
我在这里做错了什么?
c - fwprintf 什么时候返回负数?
我在任何地方的文档中都找不到它,我所做的只是发现它在发生错误时返回一个负数。会是什么错误?
错误发生在如下所示的函数中:
此外,此错误仅在程序执行期间出现并停留在那里,就好像达到某种限制一样。