widechar相关内容

为什么 Java char 原语占用 2 个字节的内存?

Java char 原始数据类型为 2 个字节,而 C 为 1 个字节,这有什么原因吗? 谢谢 解决方案 Java 最初设计时,预计任何 Unicode 字符都适合 2 个字节(16 位),因此 char 和Character 是相应设计的.事实上,Unicode 字符现在最多需要 4 个字节.因此,内部 Java 编码 UTF-16 要求补充字符使用 2 个代码单元.基本多语言平面 ..
发布时间:2021-12-26 13:42:37 Java开发

理解和用 C 编写 wchar_t

我目前正在为学校项目重写(一部分)printf() 函数.总的来说,我们需要用几个标志、转换、长度修饰符来重现函数的行为...... 我唯一要做的事情就是标记 %C/%S (或 %lc/%ls). 到目前为止,我已经收集到 wchar_t 是一种可以在多个字节上存储字符的类型,以便接受更多的字符或符号,从而与几乎所有语言兼容,不管他们的字母和特殊字符. 但是,我无法找到有关 wc ..
发布时间:2021-06-21 18:56:45 其他开发

尝试读取宽字符会产生EOF

我有一个文本文件 foo.txt ,其中包含以下内容: R⁸2 我有一个大程序读取它并处理每个字符,但是当它碰到⁸时,它总是收到EOF.这是代码的相关部分: setlocale(LC_ALL,“");FILE * in = fopen(argv [1],"r");而(1){wint_t c = getwc(in);printf(“%d",wctob(c));如果(c == -1)prin ..
发布时间:2021-05-07 18:39:50 其他开发

在调用`mbtowc()`时,gcc如何确定宽字符集?

根据gcc手册,选项 -fwide-exec-charset 指定编译时的宽字符串和字符常量的宽字符集. 但是在运行时通过调用 mbtowc()将多字节字符转换为宽字符时,宽字符集是什么? POSIX标准表示已确定多字节字符的字符集按当前语言环境的LC_CTYPE类别分类,但是对于宽字符集则什么也没说.我现在没有C标准,所以我不知道C标准对此有何评论. 与编译时一样,gcc选项 -fw ..
发布时间:2021-04-21 20:24:04 其他开发

您如何安全地在C中声明16位字符串文字?

我知道以L为前缀已经存在一种标准方法: wchar_t *test_literal = L"Test"; 问题在于,不能保证wchar_t是16位的,但是对于我的项目,我需要一个16位的wchar_t.我也想避免通过-fshort-wchar的要求. 那么,C(不是C ++)是否有任何前缀可以让我声明UTF-16字符串文字? 解决方案 那么,C(不是C ++)是否有任何 ..
发布时间:2020-07-26 03:23:16 其他开发

16位wchar_t类型的最大代码点是什么?

此处表示UTF-16的最大代码点是10FFFF 也写在那个页面上 BMP字符需要一个16位代码单元才能处理或存储. 但是以位表示形式10FFFF是 0001 0000 1111 1111 1111 1111 我们看到它占用了16位wchar_t的15位以上 (允许实现仅支持> = 0值的宽字符,而与wchar_t的符号无关) 16位wchar_t的 rea ..
发布时间:2020-07-14 03:54:16 其他开发

如何使用JNI将Java字符串转换为宽字符串

几个月前,我写了一个Java API,它使用JNI来包装C API. C API使用char字符串,而我使用GetStringUTFChars从Java字符串创建C字符串. 我忽略了非ASCII字符可能引起的问题. 从那时起,C API的创建者为每个需要或返回wchar_t字符串的C函数创建了与之等效的宽字符.我想更新Java API以使用这些宽字符功能,并克服非ASCII字符所带来的 ..
发布时间:2020-07-14 03:54:13 其他开发

将Char转换为AnsiChar或WideChar(Delphi)

我正在将一个非常古老(超过10年)的应用程序升级到最新的Delphi XE.我不断收到类似 的错误 Incompatible types: 'WideChar' and 'AnsiChar' 我只是将char强制转换为正确的类型:例如. AWideChar = WideChar(fncReturnsChar); 这会引起问题吗? 解决方案 其中可能有问题.这是MarcoCan ..
发布时间:2020-07-14 03:54:11 其他开发

为什么没有"unsigned wchar_t"?和"signed wchar_t"类型?

char的签名未标准化.因此,有signed char和unsigned char类型.因此,使用单个字符的函数必须使用既可以包含有符号字符又可以包含无符号字符的参数类型(此 类型选择为int),因为如果参数类型为char,我们将 在这样的代码中从编译器(如果使用-Wconversion)获取类型转换警告: char c = 'ÿ'; if (islower((unsigned char) ..
发布时间:2020-07-14 03:52:02 其他开发

用printf显示宽字符

我试图了解printf如何处理宽字符(wchar_t). 我已经制作了以下代码示例: 示例1: #include #include int main(void) { wchar_t *s; s = (wchar_t *)malloc(sizeof(wchar_t) * 2); s[0] = 42 ..
发布时间:2020-07-14 03:50:53 其他开发

Windows API:ANSI和宽字符字符串-是UTF8还是ASCII? UTF-16还是UCS-2 LE?

我对编码不是很专业,但这是我想知道的(尽管可能是错误的): ASCII是7位固定长度的编码,带有您可以在ASCII图表中找到的字符. UTF8是8位可变长度编码.所有字符都可以用UTF8编写. UCS-2 LE/BE是固定长度的16位编码,支持大多数常见字符. UTF-16是一种16位可变长度编码.所有字符都可以用UTF16编写. 最重要的是正确的吗? 现在,对于以下问题: ..
发布时间:2020-07-14 03:50:47 其他开发

如何更改wchar.h以使wchar_t与wint_t具有相同的类型?

wchar_t 是在wchar.h 中定义的 当前,如果开发人员只想使用wchar_t,他们将无法执行 这不会从编译器获得类型转换警告.如果 将wchar_t设为与wint_t相同的类型,这对双方都有利. 希望同时包含wint_t和wchar_t的开发人员 程序(例如,如果他们希望不仅在以下情况下编译其代码, glibc)可以执行此操作而不会收到编译器警告.开发者们 只想使用wchar_t(为 ..
发布时间:2020-07-14 02:14:27 其他开发