Tag: unicode

是否有一个与char16_t一起使用的strlen()?

正如问题所说: typedef __CHAR16_TYPE__ char16_t; int main(void) { static char16_t test[] = u”Hello World!\n”; printf(“Length = %d”, strlen(test)); // strlen equivalent for char16_t ??? return 0; } 我搜索并发现只有C ++解决方案。 我的编译器是GCC 4.7 。 编辑: 为了澄清,我正在寻找一种解决方案,它返回code points的数量,而不是characters 。 对于包含BMP之外字符的UTF-16字符串,这两者完全不同。

UTF-16字符串终止符

UTF-16字符串的字符串终止符序列是什么? 编辑: 让我重新解释一下这个问题,试图澄清一下。 对wcslen()的调用是如何工作的?

将“\\?\”字符串添加到路径 – DriverPackageUninstall

我使用DriverPackageUninstall来卸载我的驱动程序。 对于这个API,我需要输入“Inf Path”作为输入。 我需要将此路径作为UNICODE字符串。 为此,我从MSDN中获取以下声明作为参考。 对于Unicode字符串,最大长度为32,767个字符。 如果使用Unicode版本,请在路径前添加“\?\”字符串。 有关文件路径字符串格式的一般信息,请参阅在MSDN Library中命名文件。 但是当我在我的代码中尝试相同时它不起作用。 有人可以给我一些关于如何在路径之前添加“\?\”的示例吗? 谢谢.. 更新: 我尝试使用以下代码作为示例 #define UNICODE #define _UNIOCDE #define WINVER 0x501 #include #include #include int main () { PTCHAR DriverPackageInfPath = TEXT(“\\?\\c:\\Documents and Settings\\Desktop\\My.inf”); FILE * Log; Log = _wfopen( TEXT(DriverPackageInfPath, TEXT(“a”)); if ( Log == NULL ) { MessageBox(NULL, TEXT ( “Unable to open […]

swprintf在xcode中使用unicode字符失败,但在visual studio中工作

在尝试转换某些现有代码以支持unicode字符时,会出现此问题。 如果我尝试将unicode字符(在本例中使用欧元符号)传递到任何* wprintf函数中,它将失败,但似乎只在xcode中。 相同的代码在visual studio中运行良好,我甚至能够让朋友在linux上使用gcc成功测试它。 这是违规代码: wchar_t _teststring[10] = L””; int _iRetVal = swprintf(_teststring, 10, L”A¥€”); wprintf(L”return: %d\n”, _iRetVal); // print values stored in string to check if anything got corrupted for (int i=0; i<wcslen(_teststring); ++i) { wprintf(L"%d: (%d)\n", i, _teststring[i]); } 在xcode中,对swprintf的调用将返回-1,而在visual studio中,它将成功并继续为3个字符(65,165,8364)中的每一个打印出正确的值。 我已经google了很长时间,很难找到解决方案,一个已出现多次的建议是使用如下调用: setlocale(LC_CTYPE, “UTF-8”); 我已尝试使用此函数的各种参数组合但没有成功,经过进一步调查,如果我尝试将语言环境设置为默认值“C”以外的任何值,则它似乎返回null。 我不知道还有什么可以尝试解决这个问题,而且它在其他编译器/平台上运行的事实让它更令人沮丧。 任何帮助将非常感激! 编辑:我想补充一点,当swprintf调用失败时,它会设置一个错误代码(92),定义为: #define EILSEQ 92 /* […]

glib gunichar和wchar_t之间有什么区别,哪个更适合跨平台解决方案?

我正在尝试编写一些只在用户拥有gcc可移植的C代码,并安装了glib 。 从我的所有研究中,我发现使用gcc , wchar_t总是被定义为4个字节,而使用glib , gunichar也是4个字节。 我没想到的是,如果像gunichar , wchar_t也被编码为UCS4。 是这样的吗? 如果是这样,我应该能够简单地将gunichar*转换为wchar_t*并使用stdc wcs*函数,对吧?

用Unicode写入文件

我在我的c程序中写入unicode文件时遇到了一些问题。 我正在尝试将unicode日语字符串写入文件。 当我去检查文件虽然它是空的。 如果我尝试非unicode字符串,它可以正常工作。 我究竟做错了什么? setlocale(LC_CTYPE, “”); FILE* f; f = _wfopen(COMMON_FILE_PATH,L”w”); fwprintf(f,L”日本語”); fclose(f); 关于我的系统哦:我正在运行Windows。 我的IDE是Visual Studio 2008。

C中的UTF8处理

我对UTF8有基本的了解:代码点具有可变长度,因此“字符”可以是8位,16位甚至更长。 我想知道的是,如果C语言中有一些示例代码,库等与UTF8字符串类似,就像CEg中的标准库那样告诉字符串的长度等等。 谢谢,

如何在C中开始使用ICU

我需要在C中处理unicode字符串。我听说ICU是适当的库集,但我没有任何运气开始。 所以我的问题是:任何人都可以提供一个关于在C中使用带ICU的unicode字符串的好初学者教程的链接 PS我已经安装了libicu44(在Ubuntu 11.04下)。

16位wchar_t是否正式表示完整的Unicode?

在¹comp.lang.c++ Usenet组中,我最近断言,基于我认为我所知道的,Windows的16位wchar_t ,使用UTF-16编码,有时需要两个这样的值(称为“代理对”)单个Unicode代码点,对于表示Unicode无效。 这肯定是不方便的,并且与C和C ++标准库(例如字符分类)的假设相冲突,每个代码点都表示为单个值,尽管Unicode联盟的2004年“技术说明12”为使用UTF-16提供了一个很好的例子。用于内部处理,具有令人印象深刻的软件列表。 当然,似乎最初的意图是每个代码点有一个wchar_t值,这与C和C ++标准库的假设一致。 例如,在www.unix.org网页上的“ISO C修订1(MSE)”中,关于1995年将wchar_t纳入C标准的修订,作者坚持认为 “一个字节/一个字符模型的主要优点是,以固定宽度的块处理数据非常容易。 出于这个原因,发明了广泛性的概念。 宽字符是一种抽象数据类型,其大小足以包含特定平台上支持的最大字符。 但事实certificate,C和C ++标准似乎没有谈论支持的最大字符,而只讨论支持的语言环境中最大的扩展字符集 : wchar_t必须足够大才能代表最大扩展字符集中的每个代码点字符集 – 但不是Unicode,当没有Unicode语言环境时。 C99§7.17/ 2(来自N869草案): “ [ wchar_t type]是一个整数类型,其值范围可以表示支持的语言环境中指定的最大扩展字符集的所有成员的不同代码。 这几乎与C ++标准中的措辞完全相同。 并且它似乎意味着使用受限制的一组受支持的语言环境, wchar_t确实可以很小,直到使用UTF-8编码的单个字节(例如,在ASCII的A到Z之外没有标准库字符分类function的噩梦可能性,但是嘿)。 可能以下要求比这更广泛: C99§7.1.1/ 4: “ 宽字符是wchar_t类型的对象的代码值(二进制编码整数),对应于扩展字符集的成员。 …因为它引用了扩展字符集,但该术语似乎无法在任何地方进一步定义。 至少在Microsoft的C和C ++运行时,没有Unicode语言环境:该实现setlocale仅限于每个字符最多2个字节的字符编码: MSDN的setlocale文档: “可用的区域设置名称,语言,国家/地区代码和代码页的集合包括Windows NLS API支持的所有内容,除了每个字符需要两个以上字节的代码页,例如UTF-7和UTF-8。 如果您提供的代码页值为UTF-7或UTF-8,则setlocale将失败,返回NULL 。 所以它似乎与我认为的相反,与我的断言相反,Windows的16位wchar_t正式可以。 主要是由于Microsoft巧妙地缺乏对UTF-8语言环境的支持,或者每个字符超过2个字节的任何语言环境。 但它真的如此,是16位wchar_t好吗? 链接: ¹新闻:comp.lang.c ++ ²http: //unicode.org/notes/tn12/#Software_16 ³http ://www.unix.org/version2/whatsnew/login_mse.html ⁴https : //msdn.microsoft.com/en-us/library/x99tb11d.aspx

我应该从Windows代码中删除TCHAR吗?

我正在修改一些非常古老的(10年)C代码。 该代码在Unix / Mac上使用GCC进行编译,并使用MinGW对Windows进行交叉编译。 目前整个都有TCHAR字符串。 我想摆脱TCHAR并使用C ++字符串代替。 是否仍然需要使用Windows范围的function,或者我现在可以使用Unicode和UTF-8完成所有操作吗?