首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

13.1 硬编码Unicode字符串

问题

如何硬编码一个Unicode,如宽字符、源文件中的字符串?

解决方案

通过使用一个前置L来硬编码这个字符串并且把这个字符像任何别的字符串一样输入到你的源文件编辑器中,或者使用十六进制数字来代替这个unicode字符。示例13-1说明这两种办法。

示例13-1  硬编码一个Unicode字符串

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

int main() {

   // Create some strings with Unicode characters

   wstring ws1 = L"Infinity: \u221E";

   wstring ws2 = L"Euro: _";

   wchar_t w[] = L"Infinity: \u221E";

   wofstream out("tmp\\unicode.txt");

   out << ws2 << endl;

   wcout << ws2 << endl;

}

讨论

硬编码一个Unicode字符串的大部分事情是如何在你的源文件编辑器中输入这个字符串。C++提供了一个宽字符类型wchar_t,它可以用来存储这个Unicode字符串。这个类型的实现是预先定义好的,常常是使用UTF-32编码。wstring类(定义在<string>中)是一个wchar_t字符的序列,就像string类是char字符的序列一样(当然,严格来说,wstring是basic_string<wchar_t>的typedef)。

输入一个Unicode字符的最容易的方法是在一个字符串的前面前置L,如示例13-1所示:

wstring ws1 = L"Infinity: \u2210";  // Use the code itself

wstring ws2 = L"Euro: _";           // Or just type it in

现在,你可以把这些宽字符串写到一个宽字符流中去,如下所示:

wcout << ws1 << endl; // wcout is the wide char version of cout

当然,这也适用于文件:

wofstream out("tmp\\unicode.txt");

out << ws2 << endl;

处理不同字符编码最棘手的部分不是把你正确的字符加到你的源文件中,而是知道从一个数据库、HTTP需求、用户输入等得到数据如何知道它是什么类型的字符集,但是这超过了C++标准的讨论范围。C++标准并不需要特定的编码,你的操作系统用来存储源文件的字符编码可以是任意类型,只要它支持最少的由C++支持的96个字符就可以。由于这些字符不是字符集的一部分,因此它们叫做基本源字符集,标准标明它们通过使用\uXXXX或\UXXXXXXXX转义序列是必须可以得到的,这里每一个X都是十六进制数字。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论