|
Choosing A Webhost:
A web hosting service is a type of Internet hosting service that allows individuals and organizations to provide their own website accessible via the World Wide Web. Web hosts are companies that provide space on a server they own for use by their clients as well as providing Internet connectivity, typically in a data center. Web hosts can also provide data center space and connectivity to the Internet for servers they do not own to be located in their data center, called colocation. more...
|
Re: APR::Table lost UTF8 flag: msg#00273
|
Subject: |
Re: APR::Table lost UTF8 flag |
Boris Zentner wrote:
No, I think the stored strings are correct currently. The example use
latin1 chars that by luck are bellow 256 in utf8. In other words we can
not convert them back. A conversion back and forth is not possible
every-time.
But how APR::Table is supposed to know whether it should restore the UTF8
flag or not, if it has no place to store it?
How about this solution:
use Devel::Peek;
use Encode;
@str = ("Hi " . chr(0x2663), "there");
for my $str (@str) {
print "perl original string:\n";
Dump($str);
Encode::_utf8_off($str); # simulate set/get to apr::Table
print "perl string returned from APR::Table:\n";
Dump($str);
print "fixed perl string:\n";
$str = decode("utf8", $str);
Dump($str);
print "\n------------\n";
}
Here I've added: $str = decode("utf8", $str); to your original example. As
you can see, both ascii and real unicode are handled correctly.
/tmp> perl utf8.pl
perl original string:
SV = PV(0x804cef8) at 0x804cc20
REFCNT = 2
FLAGS = (POK,pPOK,UTF8)
PV = 0x805f450 "Hi \342\231\243"\0 [UTF8 "Hi \x{2663}"]
CUR = 6
LEN = 7
perl string returned from APR::Table:
SV = PVMG(0x80cee20) at 0x804cc20
REFCNT = 2
FLAGS = (SMG,POK,pPOK)
IV = 0
NV = 0
PV = 0x805f450 "Hi \342\231\243"\0
CUR = 6
LEN = 7
MAGIC = 0x80fe258
MG_VIRTUAL = &PL_vtbl_utf8
MG_TYPE = PERL_MAGIC_utf8(w)
MG_LEN = 4
fixed perl string:
SV = PVMG(0x80cee20) at 0x804cc20
REFCNT = 2
FLAGS = (SMG,POK,pPOK,UTF8)
IV = 0
NV = 0
PV = 0x80feeb0 "Hi \342\231\243"\0 [UTF8 "Hi \x{2663}"]
CUR = 6
LEN = 7
MAGIC = 0x80fe258
MG_VIRTUAL = &PL_vtbl_utf8
MG_TYPE = PERL_MAGIC_utf8(w)
MG_LEN = 4
------------
perl original string:
SV = PV(0x804cf4c) at 0x804cd04
REFCNT = 2
FLAGS = (POK,pPOK)
PV = 0x805db78 "there"\0
CUR = 5
LEN = 6
perl string returned from APR::Table:
SV = PV(0x804cf4c) at 0x804cd04
REFCNT = 2
FLAGS = (POK,pPOK)
PV = 0x805db78 "there"\0
CUR = 5
LEN = 6
fixed perl string:
SV = PV(0x804cf4c) at 0x804cd04
REFCNT = 2
FLAGS = (POK,pPOK,UTF8)
PV = 0x80fef08 "there"\0 [UTF8 "there"]
CUR = 5
LEN = 6
------------
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:stas@xxxxxxxxxx http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com
|
| |