POCO中的字符串、文本和格式化(三)

文本编码

对于在std::string和I/O流中使用不同的字符编码,Poco提供了一些支持。
向流中写入的字符串和字符能被在不同的编码之间转换。
在多字节编码的字符串中一个特定的迭代类可以被用来在所有字符上应用迭代。
目前支持下列编码:ASCII, Latin-1, Latin-9, Windows-1252, UTF-8 和 UTF-16。
POCO推荐的编码是 UTF-8。
Poco::TextConverter用来进行字符编码转换。
#include "Poco/TextConverter.h"
源编码和目标编码作为参数传递给TextConverter,convert方法执行具体的转换。
#include "Poco/TextConverter.h"
#include "Poco/Latin1Encoding.h"
#include "Poco/UTF8Encoding.h"
#include 
using Poco::TextConverter;
using Poco::Latin1Encoding;
using Poco::UTF8Encoding;
int main(int argc, char** argv)
{
std::string latin1String("This is Latin-1 encoded text.");
std::string utf8String;
Latin1Encoding latin1;
UTF8Encoding utf8;
TextConverter converter(latin1, utf8);
converter.convert(latin1String, utf8String);
std::cout << utf8String << std::endl;
return 0;
}



流转换类
Poco::OutputStreamConverter作用类似于一个筛选器,把所有写入自己的字符转换为其他编码,
然后把结果传递到流中。
Poco::InputStreamConverter类似。
#include "Poco/StreamConverter.h"


#include "Poco/StreamConverter.h"
#include "Poco/Latin1Encoding.h"
#include "Poco/UTF8Encoding.h"
#include 
using Poco::OutputStreamConverter;
using Poco::Latin1Encoding;
using Poco::UTF8Encoding;
int main(int argc, char** argv)
{
std::string latin1String("This is Latin-1 encoded text.");
Latin1Encoding latin1;
UTF8Encoding utf8;
OutputStreamConverter converter(std::cout, latin1, utf8);
converter << latin1String << std::endl; // console output will be UTF-8
return 0;
}



文本迭代类
Poco::TextIterator用来对std::string中的Unicode字符进行迭代。
#include "Poco/TextIterator.h"
字符串可以是任何被支持的编码类型,比如UTF-8。
#include "Poco/TextIterator.h"
#include "Poco/UTF8Encoding.h"
using Poco::TextIterator;
using Poco::UTF8Encoding;
int main(int argc, char** argv)
{
std::string utf8String("h汉字.");
UTF8Encoding utf8;
TextIterator it(utf8String, utf8);
TextIterator end(utf8String);
for (; it != end; ++it)
{
int unicode = *it;
}
return 0;
}


POCO 和Unicode
最新的Unix系统包括Linux在终端I/O和文件系统中都支持UTF-8。
UTF-8可以被存储到C字符串或者std::string中。
在Windows系统,POCO可以支持Unicode,从1.3.0以后就是缺省支持。
当编译POCO库和客户端代码时必须定义预处理宏POCO_WIN32_UTF8。
POCO可以调用WindowsAPI函数的Unicode变量,也可以在UTF-8和UTF-16之间转换。


Poco::Unicode类提供了对Unicode字符属性的基本支持。
void properties(int ch, CharacterProperties& props)
返回unicode字符ch的属性。
bool isLower(int ch)
bool isUpper(int ch)
检查是否大写/小写字符。
int toLower(int ch)
int toUpper(int ch)
大小写转换。


Poco::UTF8类(#include "Poco/UTF8String.h")
提供了icompare, toUpper() and toLower()的实现,能够对UTF-8起作用。
如果知道字符串是UTF8编码的,那就尽量使用UTF8的静态成员函数,而不要使用独立的函数。



你可能感兴趣的:(POCO中的字符串、文本和格式化(三))