Hidetoshi NAGAI
1/7/2009 4:09:00 AM
From: mdiam <Maurice.Diamantini@gmail.com>
Subject: Bug with Ruby/Tk encoding (ruby-1.9.1-rc1)
Date: Tue, 6 Jan 2009 18:15:01 +0900
Message-ID: <dca4d3eb-f842-48cb-9627-f9f0231ded13@r37g2000prr.googlegroups.com>
> I have a script starting like this :
>
> #!/usr/bin/env ruby
> # encoding: iso8859-1
>
> When I lauch it, the following error occurs:
I can't regenerate the error.
> .../ruby-1.9.1-rc1/lib/ruby/1.9.1/tk.rb:3028:in `find':
> unknown encoding name - (ArgumentError)
> from /.../ruby-1.9.1-rc1/lib/ruby/1.9.1/tk.rb:3028:in `<top (required)>'
Probably, the error occurs on Encoding.find(),
but tk.rb:3028 doesn't include the method.
On my archive, tk.rb:3028 is a comment line.
Please check your '.../ruby-1.9.1-rc1/lib/ruby/1.9.1/tk.rb' file.
tk.rb included ruby-1.9.1-rc1 has the following line (line:5553).
------------------------------------------------------
RELEASE_DATE = '2008-12-21'.freeze
------------------------------------------------------
> Also, is there any online doc on all the encoding feature from
> ruby-1.9.1???
Not all, but about Ruby/Tk, its default rules are the followings.
* Use Encoding.default_external for terminal outputs of Tcl/Tk libraries.
It can be referd/changed with Tk.encoding_system/encoding_system=.
* Use Encoding.default_internal for strings passed from Tcl/Tk libraries
to Ruby. It can be referd/changed with Tk.encoding/encoding=. However,
if the constant DEFAULT_TK_ENCODING is defined before 'require "tk"',
Ruby/Tk use it instead of Encoding.default_internal.
If DEFAULT_TK_ENCODING is not defined and Encoding.default_internal
is nil, use Encoding.default_external.
It may be better that Ruby/Tk returns strings by caller's script encoding.
But, if I'm right, libraries (e.g. tk.rb) can't know caller's script
encoding (at least, by low cost).
So, Ruby/Tk supports the global status (Tk.encoding) only.
Well, you can get current script encoding by __ENCODING__.
If you want to use it for Ruby/Tk, for example,
------------------------------------------------------
DEFAULT_TK_ENCODING = __ENCODING__
require 'tk'
------------------------------------------------------
or
------------------------------------------------------
require 'tk'
Tk.encoding = __ENCODING__
------------------------------------------------------
--
Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)