从C++0x工作草案开始,用于处理Unicode的新字符类型(char16_t和char32_t)将是无符号的(uint_least16_tuint_least32_t将是基础类型)。但据我所知(也许不是很远)没有定义类型char8_t(基于uint_least8_t)。为什么?当您看到为UTF-8字符串文字引入了新的u8编码前缀时,它更加令人困惑......基于老friend(有符号/无符号)char.为什么?更新:有人提议添加一个新类型:char8_tchar8_t:UTF-8字符和字符串的类型(修订版1)http://www.open-std.org/jtc1/sc22/wg21
假设我有一个UTF-8编码的std::string包含以下内容:óó我想将其转换为以下内容:ÓÓ理想情况下,我希望我使用的大写/小写方法在所有UTF-8中通用。如果可能的话。字符串中的原始字节序列是0xc3b3c3b3(每个字符两个字节,ó的两个实例),我希望输出为0xc393c393(Ó的两个实例)。有someexamples在StackOverflow上,但他们使用宽字符串,并且otheranswers说你不应该为UTF-8使用宽字符串。看起来这个问题可能非常“棘手”,因为输出可能取决于用户的区域设置。我原以为只使用std::toupper()之类的东西,但我真的不清楚它的用法,因
短版:如果我想编写可以有效执行Unicode字符操作的程序,能够输入和输出UTF-8或UTF-16编码的文件。使用C++执行此操作的合适方法是什么?长版:C++早于Unicode,并且两者都已经有了显着的发展。我需要知道如何编写符合标准且无泄漏的C++代码。我需要一个明确的答案:我应该选择哪个字符串容器?std::string用UTF-8?std::wstring(不太了解)std::u16string使用UTF-16?std::u32string使用UTF-32?我应该完全坚持使用上述容器之一还是在需要时更换它们?使用UTF字符串时,我可以在字符串文字中使用非英语字符吗,例如波兰语字
考虑这个程序:#includeintmain(){printf("%s\n",__FILE__);return0;}根据文件的名称,此程序是否有效。我面临的问题是我想以编码安全的方式打印当前文件的名称。但是,如果文件包含无法在当前代码页中表示的有趣字符,编译器会发出警告(理所当然):?????????.c(3):warningC4566:characterrepresentedbyuniversal-character-name'\u043F'cannotberepresentedinthecurrentcodepage(1252)我该如何解决这个问题?我想将__FILE__给出的字符
流行的软件开发商和公司(JoelSpolsky,FogCreeksoftware)在编写C或C++代码时倾向于使用wchar_t来存储Unicode字符。关于良好的编码实践,应该何时以及如何使用char和wchar_t?在编写利用Unicode的软件时,我对POSIX合规性特别感兴趣。当使用wchar_t时,您可以在每个字符或每个数组元素的基础上查找宽字符数组中的字符:/*Ccodefragment*/constwchar_t*overlord=L"ov€rlord";if(overlord[2]==L'€')wprintf(L"Charactercomparisononaper-ch
我想使用boost文件系统读取/写入具有unicode文件名的文件,Windows上的boost语言环境(mingw)(最后应该是平台独立的)。这是我的代码:#include#defineBOOST_NO_CXX11_SCOPED_ENUMS#include#includenamespacefs=boost::filesystem;#include#includeintmain(){std::locale::global(boost::locale::generator().generate(""));fs::path::imbue(std::locale());fs::pathfil
终于(在推迟多年后)将我的应用程序本地化为英语以外的其他几种语言。第一个挑战是设计与我的C++/MFC应用程序的集成,该应用程序具有数十个对话框和无数字符串。我遇到了两种可能的替代实现:将本地化资源文件编译并部署为DLL提取所有字符串并将其替换为本地化版本。对于每个将有一个XML(或简单文本)文件。我个人选择第二种选择,因为在我看来它更灵活。更改很多但并不难,而且非常重要的是,对于翻译人员来说,XML文件将非常容易修改。非常感谢任何建议。问候,科斯敏乌古鲁http://www.batchphoto.com/ 最佳答案 我用不同的语言
这两种字符串存储格式有什么区别吗? 最佳答案 std::wstring是wchar_t的容器。wchar_t的大小未指定—Windows编译器倾向于使用16位类型,Unix编译器倾向于使用32位类型。UTF-16是一种在16位整数序列中编码Unicode代码点序列的方法。使用VisualStudio,如果您使用不包含BMP之外的字符的宽字rune字(例如L"HelloWorld"),你最终会得到UTF-16,但大多数情况下这两个概念是不相关的。如果您使用BMP之外的字符,std::wstring将不会翻译surrogatepairs
C++11对标识符中允许的Unicode代码点列表进行了大量添加(§E)。这包括字节顺序标记,它包含在FE47-FFFD范围内。查询字符浏览器,这个范围包括一大堆随机的东西,从WHITESESAMEDOT到PRESENTATIONFORMFORVERTICALLEFTSQUAREBRACKET之间,包括一些“小标点符号,花哨的阿拉伯语,BOM出现在这里,半角和全角亚洲字符,最后包括通常用于指示损坏的文本呈现的REPLACEMENTCHARACTER。这肯定是某种错误。他们觉得有必要排除“芝麻点”,不管它们是什么,但是字节顺序标记a.k.a.已弃用的零宽度不间断空格是公平的游戏吗?当有另
我注意到std::string的length方法返回以字节为单位的长度,而std::u16string中的相同方法返回2字节序列的数量。我还注意到,当字符或代码点位于BMP之外时,长度返回4而不是2。此外,Unicode转义序列被限制为\unnnn,因此U+FFFF之上的任何代码点都不能被转义序列插入。换句话说,似乎不支持BMP之外的代理对或代码点。鉴于此,使用理解UTF-8、UTF-16、代理项对等的非标准字符串操作库是否已被接受或推荐?我的编译器是否有错误,或者我是否错误地使用了标准字符串操作方法?例子:/**ExamplewiththeUnicodecodepointsU+004