-
Notifications
You must be signed in to change notification settings - Fork 7
/
Util.pm
58 lines (44 loc) · 1.36 KB
/
Util.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package Moxy::Util;
use strict;
use warnings;
# -------------------------------------------------------------------------
# detect response charset.
# see Plagger::Util
my $Detector;
BEGIN {
if ( eval { require Jcode; 1 } ) {
$Detector = sub { my ($code, $nmatch) = Jcode::getcode($_[0]); $code };
} elsif ( eval { require Encode::Detect::Detector; 1 } ) {
$Detector = sub { Encode::Detect::Detector::detect($_[0]) };
} else {
require Encode::Guess;
$Detector = sub {
my @guess = qw(utf-8 euc-jp shift_jis); # xxx japanese only?
eval { Encode::Guess::guess_encoding($_[0], @guess)->name };
};
}
}
sub HTTP::Response::charset {
my ($self, ) = @_;
return $self->{__charset} ||= do {
my $charset;
if ( $self->header('Content-Type') =~ /charset=([\w\-]+)/io ) {
$charset = $1;
}
$charset ||= ( $self->content() =~ /<\?xml version="1.0" encoding="([\w\-]+)"\?>/ )[0];
$charset ||= ( $self->content() =~ m!<meta http-equiv="Content-Type" content=".*charset=([\w\-]+)"!i)[0];
$charset ||= $Detector->( $self->content() );
$charset ||= 'cp932';
$charset;
};
}
1;
__END__
=head1 NAME
Moxy::Util - utility functions
=head1 SYNOPSIS
this is just a internal class.
=head1 AUTHORS
Tokuhiro Matsuno
=head1 SEE ALSO
L<Moxy>