新規投稿
フォローする

GaroonメッセージAPIで文字化け

Garoonでメッセージ送信するAPIを使用し、特定条件でメッセージを送ろうとしています。
メッセージを送信することはできるのですが、どうしても日本語が文字化けしてしまいます。
文字コードの変換などを行いましたが、うまくいかず日本語が送信できません。

Windows上でPerlを使用しています。
正しくSOAPで文字を受け渡す方法はありますでしょうか?
よろしくお願いします。

下記は、SOAPメッセージ作成パートです。

クライアント生成

my $service = SOAP::Lite->proxy(https://xxxxx.cybozu.com/g/cbpapi/message/api.csp);
$service->soapversion('1.2');
$service->envprefix("SOAP-ENV");

ヘッダーを生成

my $header_xml = <<"EOS";
<Action xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">MessageCreateThreads</Action>
<Security xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
SOAP-ENV:mustUnderstand="1"
xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
<UsernameToken wsu:Id="id">
<Username>$login_name</Username>
<Password>$password</Password>
</UsernameToken>
</Security>
<Timestamp xmlns="http://schemas.xmlsoap.org/ws/2002/07/utility">
<Created>2037-08-12T14:45:00Z</Created>
<Expires>2037-08-12T14:45:00Z</Expires>
</Timestamp>
<Locale>jp</Locale>
EOS
my $header = SOAP::Header->type('xml' => $header_xml);

リクエスト内容を生成

my $parameters_xml = <<"EOS";
<parameters>
<create_thread>
<thread id="dummy" version="dummy" subject="テストメールタイトル" confirm="false">
<addressee user_id="1" name="dummy" deleted="false"></addressee>
<content body="テスト本文"></content>
<folder id="dummy"></folder>
</thread>
</create_thread>
</parameters>
EOS

my $parameters = SOAP::Data->type('xml' => $parameters_xml);

実行

my $result = $service->call($action, $parameters, $header);

0

2件のコメント

Avatar
Kawamukai Naoki

文字列の内部表現の問題のようです。
おそらくこちらのブログの方と同様の現象と思われます。
http://ziguzagu.org/2012/10/soaplite-1ab3.html

以下の二つをお試しいただくといかがでしょうか?

  1. ソースコードをUTF8で保存する
  2. 先頭に"use utf8;"を追記する

※2.はソースコードを修正することでも代替可能です。

- my $parameters = SOAP::Data->type('xml' => $parameters_xml);
+ use Encode;
+ my $parameters = SOAP::Data->type('xml' => decode('utf-8', $parameters_xml));

こちらでは以下の環境で試したところ正しく動作いたしました。
OS: Ubuntu 14.04
Perl: 5.18.1
SOAP Lite: 1.09

1
Avatar
Saito

Kawamukai Naoki様、

無事に文字化け解消されました
ありがとうございました!

0
サインインしてコメントを残してください。