小编Mat*_*att的帖子

Perl:utf8 :: decode与Encode :: decode

我有一些有趣的结果试图辨别使用Encode::decode("utf8", $var)和之间的差异utf8::decode($var).我已经发现在变量上多次调用前者最终会导致错误"无法解码带有宽字符的字符串...",而后一种方法将很乐意运行多次,只需返回false.

我无法理解的是该length函数如何根据您用于解码的方法返回不同的结果.问题出现是因为我正在处理来自外部文件的"双重编码"utf8文本.为了演示这个问题,我在一行创建了一个文本文件"test.txt",其中包含以下Unicode字符:U + 00e8,U + 00ab,U + 0086,U + 000a.这些Unicode字符是Unicode字符U + 8acb的双重编码,以及换行符.该文件以UTF8编码为磁盘.然后我运行以下perl脚本:

#!/usr/bin/perl                                                                                                                                          
use strict;
use warnings;
require "Encode.pm";
require "utf8.pm";

open FILE, "test.txt" or die $!;
my @lines = <FILE>;
my $test =  $lines[0];

print "Length: " . (length $test) . "\n";
print "utf8 flag: " . utf8::is_utf8($test) . "\n";
my @unicode = (unpack('U*', $test));
print "Unicode:\n@unicode\n";
my @hex = (unpack('H*', $test));
print "Hex:\n@hex\n";

print "==============\n";

$test = Encode::decode("utf8", $test);
print "Length: …
Run Code Online (Sandbox Code Playgroud)

perl encoding utf-8 decoding

7
推荐指数
1
解决办法
2万
查看次数

STL upper_bound的定义不一致?

upper_bound状态的文档:

...它试图在有序范围内找到元素值[first,last] ... upper_bound返回[first,last]中最远的迭代器i,这样,对于[first,i)中的每个迭代器j,value <*j是假的.

但是,如果我们有一个vector<int> v包含数字1,2和3,upper_bound(v.begin(), v.end(), 5)则会返回调用v.end().但基于定义,v.end()不在范围内[v.begin, v.end()).没有这样的迭代器符合定义中的要求.这个定义是否只是懒惰而没有明确说明在这种情况下会发生什么?

c++ stl

0
推荐指数
1
解决办法
167
查看次数

标签 统计

c++ ×1

decoding ×1

encoding ×1

perl ×1

stl ×1

utf-8 ×1