diff --git a/ext/gpgme/gpgme_n.c b/ext/gpgme/gpgme_n.c index 3c703a7..36b2fee 100644 --- a/ext/gpgme/gpgme_n.c +++ b/ext/gpgme/gpgme_n.c @@ -39,6 +39,7 @@ #include "ruby.h" #ifdef HAVE_RUBY_ENCODING_H #include "ruby/encoding.h" +static rb_encoding *utf8Encoding; #endif #include "gpgme.h" #include @@ -346,6 +347,14 @@ write_cb (void *handle, const void *buffer, size_t size) vhook_value = RARRAY_PTR(vcb)[1]; vbuffer = rb_str_new (buffer, size); +#ifdef HAVE_RUBY_ENCODING_H + rb_encoding *default_internal_enc = rb_default_internal_encoding(); + rb_enc_associate(vbuffer, utf8Encoding); + if (default_internal_enc) { + vbuffer = rb_str_export_to_enc(vbuffer, default_internal_enc); + } +#endif + vnwrite = rb_funcall (vcbs, rb_intern ("write"), 3, vhook_value, vbuffer, LONG2NUM(size)); return NUM2LONG(vnwrite); @@ -3068,4 +3077,8 @@ Init_gpgme_n (void) rb_define_const (mGPGME, "GPGME_EXPORT_MODE_PKCS12", INT2FIX(GPGME_EXPORT_MODE_PKCS12)); #endif + +#ifdef HAVE_RUBY_ENCODING_H + utf8Encoding = rb_utf8_encoding(); +#endif }