题
什么是最佳做法的Unicode处理在C++?
解决方案
- 使用 重症监护病房 处理你的数据(或类似的图书馆)
- 在你自己的数据存储,确保一切是存在的同样的编码
- 确保你总是用你的unicode库对于平凡的任务,如串的长度、资本状态,等等。从来没有使用标准的图书馆内置喜欢
is_alpha
除非那是你想要的。 - 我不能说它够的: 从来没有迭代指数的一个
string
如果你关心的正确性,随时使用unicode库。
其他提示
如果你不关心向后兼容与以前的C++标准,目前C++11标准已经建立在Unicode支持: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf
所以真正的最佳做法Unicode处理在C++将使用的设施。这并不总是一种可能性与老年码基地不过,标准正在使新。
编辑:为了澄清,C++11Unicode知道它现在具有支持Unicode的文字和统一字符串。然而,该标准图书馆只有 有限的支持 Unicode的处理和转换。你的当前的需要,这可能是不够的。然而,如果您需要做的大量繁重的,现在然后你可能仍然需要使用什么样的 重症监护病房 为了更深入的处理。有一些建议 目前在工作 包括更强有力的支持对文本之间的转换不同的编码。我猜(希望)的是,这将部分下 技术报告.
我们的公司(及其他)使用开放源代码 国际组for Unicode (伊斯兰法院联盟)库最初是由Taligent.
它处理串、选择、转换的日期/时间、整理、转换等。al。
开始的 伊斯兰法院联盟放到用户手册
这是一个清单,用于Windows编程:
- 所有串括在_T("我string")
- strlen()等。功能的替代_tcslen()等。
- 使用LPTSTR和支,而不是char*和const char*
- 当启动新的项目开发工作室,确保宗教Unicode的选择是选择在项目属性。
- C++字符串中使用std::wstring而不是std::string
看看 情况不敏感的串比较C++
这个问题有一个链接到Microsoft文件Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
如果你看看左边的导航侧MSDN上的下一个到那篇文章你应该找到很多相关的信息Unicode的功能。它是一部分的一章"编码的字符"(http://msdn.microsoft.com/en-us/library/cc194786.aspx)
它具有以下小节:
- 代码页模型
- 双字符集在Windows
- Unicode
- 兼容性问题,在混合环境中
- Unicode的数据转换
- 迁移到Windows基于的程序以Unicode
- 摘要
虽然这可能不是最好的做法,为每个人,你可以写你自己C++UNICODE程序,如果你想要的!
我只是完成了这样做在一个周末。我学到了很多,但我不保证这是100%的免费的错误,我做了很多测试的和似乎能正常工作。
我的代码是根据新的BSD许可证,并可以在这里找到:
http://code.google.com/p/netwidecc/downloads/list
它被称为WSUCONV和带有样品的主要()程序之间转换的UTF-8,UTF-16和标准ASCII。如果你扔掉的主要代码,你已经有了一个漂亮的图书馆的读写UNICODE。
如上面已经说了一个图书馆是最好的选择时使用的大型系统。但是有些时候你想到处理的事情,你的自行(也许是因为将图书馆将使用许多资源,如上一个微控制器)。在这种情况下你想要一个简单的图书馆,你可以复制件对的事情你实际需要。
柳Schlanger的例码似乎是一个很好的一个(见他的回答更多的细节)。
我还发现了另一个具有小型代码,但是缺乏充分的错误检查和只处理UTF-8但是更简单的采取的部分出来的。
这里有一个列表中的嵌入图书馆似乎不错。
嵌入图书馆
- http://code.google.com/p/netwidecc/downloads/list (UTF8,UTF16LE,UTF16BE,UTF32)
- http://www.cprogramming.com/tutorial/unicode.html (UTF8)
- http://utfcpp.sourceforge.net/ (简单UTF8库)
使用IBM的 国际组for Unicode
看一看的建议 UTF-8无处不在