workaround for UTF-8 encoding problem at Net::Twitter 3.04006 under 'use utf8' [Perl]

| トラックバック(0)

Net::Twitter は 相変わらずAPI引数のvalueだけをencode_utf8してくださるので、use utf8環境下で非ASCII文字をAPI引数のvalueに渡すと文字化けさせてくれます。文字化けの原因は以前に書いた通り

use utf8;
use Net::Twitter;

my $twitter = Net::Twitter->('略');
my $status = '日本語';
$twitter->update({status => $status}); # 文字化ける

no utf8 でkeyにUTF8フラグを付けないようにしておくと文字化けないです。

use utf8;
use Net::Twitter;

my $twitter = Net::Twitter->('略');
my $status = '日本語';
{ no utf8;
$twitter->update({status => $status}); # 文字化けない
}

もしくはkeyを全部encode_utf8してUTF8フラグを落としておくとか、しかしめんどくさい

後は、 Net::Twitter(及びBaseクラスのNet::Twitter::Core)を継承して、

use strict;
use warnings;
use utf8;

package WA::Net::Twitter;
use Moose;
use Encode qw/encode_utf8/;

extends qw/Net::Twitter Net::Twitter::Core/;

around _authenticated_request => sub {
  my ($next, $self, @args) = @_;
  $args[2] = +{
    map { 
      (utf8::is_utf8($_) ? encode_utf8($_) : $_) =>
      $args[2]->{$_}
    } keys %{$args[2]} };
  $next->($self, @args);
};

package main;

use Config::Pit;
my $cnf = pit_get('twitter.com' => required => {
    username => 'your twitter id',
    password => 'your twitter password',
  }) or die "failed to get auth info";
my $twitter = WA::Net::Twitter->new(%$cnf);
$twitter->update({status => 'てすと'});

なんてのも出来るかな。しかしprivateメソッドを弄るのはどうなんだ

トラックバック(0)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/28

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        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

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic