问题标签 [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.
python - 在 Python 扩展模块中将标准输入设置为宽字符方向
在 C Python 扩展模块中,我使用了一个库,它可以执行fwide(stdin,1)
. 这导致EOFError
我input()
在 Python 代码中调用。当我避免fwide(stdin,1)
使用模块的 C 代码时,python 代码可以正常工作。
问题是,是否可以让 python 与宽字符一起工作stdin
,还是必须stdin
为 Python 保留窄字符模式?这是 Python 中的一个错误(它似乎不介意stdout设置为宽还是窄)?
这是 Python 3,我不知道 python 2 是否有相同的行为。
windows - 在 Windows C++ 控制台应用程序中使用 wchar_t/wmain 有意义吗?
我一直在用 C++ 编写一个新的命令行应用程序。我们支持的一个平台当然是 Windows。
默认情况下,Windows 控制台根据区域设置使用 OEM 代码页(例如,在我的机器上它是 CP437 / DOS.Western)。我想,如果它是 Windows Cyrillic 版本,它会是 CP866,等等。这些 OEM 代码页仅包含 256 个字符)
我认为这意味着 Windows 控制台根据默认代码页将输入的击键转换为字符。(并且,根据当前选择的字体,如果有对应的字形,就会显示出来)。
- 在这种情况下,在我的应用程序中使用 wmain/wchar_t 和宽字符类型是否有意义?
- 使用宽类型有什么好处吗?或者如果只使用 char * 会有什么严重的问题吗?
- 当使用宽字符类型时,命令行参数和环境字符串的编码是什么 - (wchar_t * argv[] 和 wchar_t * envp[]),我的意思是。它们是由 Windows CRT 转换为 UTF-16,还是原封不动?
感谢您的贡献。
delphi - WideChar 到字节?
我在这里有一个简单的问题。如何在 Delphi - 7中转换WideChar
为 2x ?Byte
我搜索了互联网和StackOverflow,但没有结果......
c - 调用 mbtowc() 时 gcc 如何决定宽字符集?
根据 gcc 手册,该选项-fwide-exec-charset
在编译时指定宽字符串和字符常量的宽字符集。
mbtowc()
但是通过在运行时调用将多字节字符转换为宽字符时,宽字符集是什么?POSIX 标准说多字节字符的字符集由当前语言环境的 LC_CTYPE 类别决定,但对宽字符集只字未提。我现在手头没有 C 标准,所以我不知道 C 标准对此有何评论。
gcc 选项是否像在编译时一样-fwide-exec-charset
确定 使用的宽字符集?mbtowc()
perl - 如何让 File::Queue 能够在 perl 中处理 utf8 字符串?
我正在 perl 中处理来自 XML 文件的一些数据,并想使用 FIFO File::Queue 来划分和加速该过程。一个 perl 脚本解析 XML 文件并为另一个脚本准备 JSON 输出:
只要%data
包含数字和 az 数据,就可以正常工作。但是当出现其中一个宽字符时(例如 ł、ą、ś、ż 等),我得到:Wide character in syswrite at /usr/lib/perl/5.10/IO/Handle.pm line 207.
我试图检查字符串是否为有效的 utf8:
我确实得到了1:1
- 所以是的,我确实有正确的 utf8 字符串。
我发现原因可能是 syswrite 将文件处理程序获取到不知道是 :utf8 编码文件的队列文件。
我对吗?如果是这样,有什么方法可以强制 File:Queue 使用 :utf8 文件处理程序?也许 File:Queue 不是最好的选择——我应该使用其他方法在两个 perl 脚本之间创建 FIFO 队列吗?
c - C 标准:L 前缀和八进制/十六进制转义序列
我没有在 C 标准中找到如何处理上述宽字符串中的转义序列的解释。
例如:
这些是否以某种方式处理(例如在每个字节前加上 \x00 字节)或存储在内存中的方式与此处声明的方式完全相同?
还有,L前缀是如何按照标准操作的?
编辑:
让我们考虑一下txt2。它将如何存储在内存中?\xA9\x00\x03\x00 还是 \xA9\x03 写的?\x03A9 也是如此。这会被视为一个宽字符还是被视为两个单独的字节,它们将被制成两个宽字符?
编辑2:
标准 说:
反斜杠后面的十六进制数字和十六进制转义序列中的字母 x 被视为整数字符常量的单个字符或宽字符常量的单个宽字符的构造的一部分。如此形成的十六进制整数的数值指定所需字符或宽字符的值。
现在,我们有一个 char 文字:
它由 2 个十六进制转义序列组成,因此应将其视为两个宽字符。如果这些是两个宽字符,它们不能放入一个 wchar_t 空间(但它在 MSVC 中编译),在我的情况下,这个序列被视为如下:
这是唯一的十六进制转义序列,因此是唯一的宽字符。
编辑3:
结论:每个八进制/十六进制序列都被视为一个单独的值( wchar_t *txt2 = L"\xA9\x03"; 由 3 个元素组成)。wchar_t txt = L'\xFE\xFF'; 不可移植 - 实现定义的功能,应该使用 wchar_t txt = L'\xFFFE';
c++ - 赋值和相等运算符中的宽字符和字符
假设它wc
是 awchar_t
并且c
是 a char
。
1)这两个作业有什么不同吗?
2) 是否有任何规则强制ASCII 值c
相等?对编译器wc
究竟意味着什么?wc == c
kernel-module - VxWorks 可下载内核模块上的宽字符支持
我正在将一个项目从 Linux 移植到 VxWorks DKM。但我面临一个问题:在 linux 上,该项目的某些部分使用了宽字符和宽字符函数(如 wcslen() 或 mbrtowc() ),并且由于 VxWorks DKM 不支持宽字符(和宽字符函数.. .) 我被困住了。我的问题是:我可以使用 VxWorks DKM 上的 Wide chars 替代品吗?
VxWorks 的 RTP 模式支持宽字符,但 DKM 不支持。
c - Why does wcwidth return -1 with a sign that I can print on the terminal?
Why does here wcwidth
return "-1" (not a printable wide character) width "Ԥ" (0x0524)?
c++ - Write encrypted wstring to wofstream
I have a simple "encryption" function that works with wstring
variables and I want to write the result of this function into a file, using wofstream
.
This is my code:
So, the problem with this piece of ... code is that although the wprintf_s
function outputs the entire encrypted text, in the written file I only see the characters inside the ASCII range (or at least is what it seems to me). The encrypted text is saved until an unknown character is found (displayed by ? in the console). I want to save any character, and I want them saved as wide chars (1 word each one). How can I do this?