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 <iostream>
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 <iostream>
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的静态成员函数,而不要使用独立的函数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值