草庐IT

c++ - 检查UTF-8是wchar_t还是char?

我正在调用zlibAPIzipOpen,它从我的C++项目创建一个新的zip文件。函数签名是externzipFileZEXPORTzipOpen(constchar*pathname,intappend)。此调用最终调用fopen以创建文件。但是,此函数不支持宽字符,我想通过发送UTF-8格式(由char*和fit函数签名表示)并在调用fopen之前检查是否字符串包含非ascii字符,如果没有,像以前一样调用fopen。如果是,转换为宽字符串(wchar_t)并调用_wfopen。所以问题是是否有一个C/C++API可以检查UTF-8格式的字符串是否包含非ascii字符?基本上我正在

c++ - WCHAR 到 LPCWSTR

当我像下面这样使用CreateFile函数时......它给了我有效的句柄HANDLEhDevice=CreateFile(TEXT("\\\\.\\G:"),0,FILE_SHARE_READ|FILE_SHARE_WRITE,//sharemodeNULL,OPEN_EXISTING,0,NULL);if(hDevice==INVALID_HANDLE_VALUE){qDebug()当我像下面这样使用时......它给我无效的句柄..WCHARDrive[4];qDebug()如何将wchar更改为LPCWSTR谢谢 最佳答案

c++ - 如何在 visual studio(c++) 中将文字中文字符串分配给 wchar_t*?

我正在尝试在visualstudioforC++的Windows测试应用程序中编译以下代码:constwchar_t*chinese="好久不见";但是我得到以下错误:errorC2440:'initializing':cannotconvertfrom'constchar[5]'to'constwchar_t*我正在用unicode编译,所以我对此感到困惑。如果我像这样转换文字,错误就会消失:constwchar_t*chinese=(wchar_t*)"好久不见";我不确定这样做是否安全,我也不想这样做,所以我该如何解决这个问题。谢谢! 最佳答案

c - 如何最好地处理 Windows 的 16 位 wchar_t 丑陋?

我正在编写一个与mingw一起使用的包装层,它为应用程序提供了一个虚拟的UTF-8环境。处理文件名的函数是从UTF-8转换并调用相应的“_w”函数等的包装器。我遇到的最大问题是Windows的wchar_t是16位的。对于文件系统操作,这没什么大不了的。我可以在UTF-8和UTF-16之间来回转换,一切正常。但是标准的C多字节/宽字符转换API不允许多wchar_t字符。可能的解决方案:提供CESU-8环境而不是UTF-8。我真的不喜欢这个。走捷径,只支持BMP。将长度为4的UTF-8序列视为无效。扩展包装器以将mingw的wchar_t替换为typedefint32_twchar_t

c++ - rapidxml 在 wchar_t 内容上抛出异常

在win32平台解析wchar_t内容时,rapidxml可能会抛出parse_error异常。内容:这是我的测试代码:/**@file:TestRapidXmlBug.cpp*@author:shilyx*@date:2015-09-1611:02:22.886*@note:GeneratedbySlxTemplates*/#include#include"rapidxml.hpp"#include#includeusingnamespacestd;usingnamespacerapidxml;intmain(intargc,char*argv[]){//datablockunsig

c++ - 与遗留 TCHAR 代码接口(interface)的正确样式

我正在修改广泛使用TCHAR的其他人的代码。在我的代码中只使用std::wstring是否更好?wstring应该等同于widechar平台上的TString,所以我看不出有什么问题。理由是,使用原始wstring比支持TCHAR更容易……例如,使用boost:wformat。下一个维护者会更清楚哪种风格?我自己浪费了几个小时试图理解字符串的复杂性,似乎只使用wstring就会减少你需要理解的一半内容。typedefstd::basic_stringTString;//onwinxp,TCHARresolvestowchar_ttypedefbasic_string,allocator

windows - 在 Windows C++ 控制台应用程序中使用 wchar_t/wmain 是否有意义?

我一直在用C++编写一个新的命令行应用程序。我们支持的平台之一当然是Windows。默认情况下,Windows控制台根据区域设置使用OEM代码页(例如,在我的机器上是CP437/DOS.Western)。我认为,如果它是Windows西里尔文版本,它应该是CP866,等等。这些OEM代码页仅包含256个字符)我认为这意味着Windows控制台根据默认代码页将输入的击键转换为字符。(并且,根据当前选择的字体,如果有相应的字形,则显示)。在这种情况下,在我的应用程序中使用wmain/wchar_t和宽字符类型是否有意义?使用宽类型有什么好处吗?或者如果只使用char*会有什么严重的问题吗?

c++ - 将 basic_string<char16_t> 传递给只接受 wchar_t * 和 char * 的方法

当您只能获取存储在char16_t的basic_string中的值时,如何使用仅接受char*和wchar_t*的方法?例如在cstdio中删除。cstdio中的remove函数只接受char*和wchar_t*。不能将char16_t转换为wstring:link.Char无法处理所有UTF-16字符 最佳答案 您需要对卡在std::basic_string中的UTF-16进行转码到采用std::string的任何函数所使用的正确编码或charconst*作为论据。同样,您需要在定位wchar_t时更改编码基于序列。当然,随着人们

c - UTF-8 文本到剪贴板 C

我一直在寻找如何带一个字符串,constchar*output="ヽ(⌐■_■)ノ♪♬";到剪贴板。SetClipboardData(CF_UNICODETEXT,hMem);我已经尝试过MultiByteToWideChar,但我得到的只是噪音,还有相互矛盾的说法,即您无法将UTF-16LE保存到剪贴板(wchar_t)。老实说,我只是很困惑。最好有说明或代码示例。 最佳答案 Windows使用UTF-16LE。该字符串应使用L前缀创建。要使用UTF8,您可以使用u8前缀声明字符串。例如:constchar*text=u8"ヽ(⌐

c++ - wchar_t 对 Windows API 有用吗?

当我#include在C或C++中,我被迫决定字符的格式,其中TCHAR要么等于char或wchar_t.我四处看了很多,就像thisone这样的帖子或类似this的网站指出wchar_t事情发生在UTF8之前的很久以前,并且由于各种原因,在现代编程中并不是一个特别好的Unicode解决方案。然而,这些并没有说明对已经在wchar_t中运行的现有系统的支持。.所以我的问题是,我应该使用哪一个?如果我使用普通的char这会在未来被MS放弃吗,因为在一天结束时,wchar_tAPI版本更新?或者如果我使用wchar_t,让我的代码在其他现代平台上运行会很痛苦吗,这些平台后来使用普通的旧ch