`cmd` and UTF-8

I have spent several hours searching for this and I still don't know how
it works.

How is `cmd` string encoded? I want it in UTF-8, but I don't know how to
do it!
I have tried with $KCODE = 'u' but it doesn't works.
My Ruby version is 1.8.2

···

--
Posted via http://www.ruby-forum.com/.

Do you mean the return value? That depends on your platform, locale,
and, possibly, the program itself. If you know the encoding, you can
use Iconv to convert it to UTF-8:

  require 'iconv'
  s = `some cmd` # returns a string in iso-8859-1, for example
  iconv = Iconv.new("utf-8", "iso-8859-1")
  iconv.iconv(s) # => string in UTF-8

Perhaps you could post a sample of code to show what you are trying to
do. It's easier to solve a concrete problem than to read minds.

Paul.

···

On 18/08/06, Antonio Mat <atd@ruidodebarrio.org> wrote:

I have spent several hours searching for this and I still don't know how
it works.

How is `cmd` string encoded? I want it in UTF-8, but I don't know how to
do it!
I have tried with $KCODE = 'u' but it doesn't works.
My Ruby version is 1.8.2

Antonio Mat wrote:

I have spent several hours searching for this and I still don't know how
it works.

How is `cmd` string encoded? I want it in UTF-8, but I don't know how to
do it!
I have tried with $KCODE = 'u' but it doesn't works.
My Ruby version is 1.8.2

Here is a solution:

  ENV["LC_ALL"] = "C.UTF-8"
  utf8_string = `cmd`

Thank you all!

···

--
Posted via http://www.ruby-forum.com/\.

Paul Battley wrote:

I have spent several hours searching for this and I still don't know how
it works.

How is `cmd` string encoded? I want it in UTF-8, but I don't know how to
do it!
I have tried with $KCODE = 'u' but it doesn't works.
My Ruby version is 1.8.2

Do you mean the return value? That depends on your platform, locale,
and, possibly, the program itself. If you know the encoding, you can
use Iconv to convert it to UTF-8:

  require 'iconv'
  s = `some cmd` # returns a string in iso-8859-1, for example
  iconv = Iconv.new("utf-8", "iso-8859-1")
  iconv.iconv(s) # => string in UTF-8

Perhaps you could post a sample of code to show what you are trying to
do. It's easier to solve a concrete problem than to read minds.

Yes, I mean the return value.

I can't use Iconv because the script should work with any locale.
This is the code:

  require 'rexml/document'

  [...]

  include REXML

  @atom = Document.new
  entry = Element.new 'entry'
  entry.attributes['xmlns'] = 'http://www.w3.org/2005/Atom&#39;
  @atom.elements << entry
  @atom << XMLDecl.new

  e = Element.new 'title'
  e << Text.new(`dcop amarok player title`)
  entry << e

XML tag text should be in UTF-8.

Thank you.

···

On 18/08/06, Antonio Mat <atd@ruidodebarrio.org> wrote:

--
Posted via http://www.ruby-forum.com/\.

Yes, I mean the return value.

I can't use Iconv because the script should work with any locale.

Until Ruby gets some non-basic Unicode support, I -think- you're stuck to iconv-ing. I don't think that even $KCODE='u' will detect user input locale and convert automatically, but only changes the behaviour of string manipulation code. I could be completely wrong though.

You should be able to detect the current locale using the standard library, I haven't really done this though. Welcome to the world of text encoding, may whoever invented codepages burn in hell forever for that.

David Vallner

Hi,

At Sat, 19 Aug 2006 04:04:03 +0900,
Antonio Mat wrote in [ruby-talk:209287]:

I can't use Iconv because the script should work with any locale.

Then what encoding does your target program use?

If it is affected by environment locale, it may use utf-8 by
setting ENV["LC_ALL"] etc.

···

--
Nobu Nakada