encoding Tcl Built-In Commands 8.1


encoding - Manipulate encodings


encoding option ?arg arg ...?


Strings in Tcl are encoded using UTF-8 character sequences. Different operating system interfaces or applications may generate strings in other encodings such as Shift-JIS. The encoding command helps to bridge the gap between Tcl strings and these other formats.


Performs one of several encoding related operations, depending on option. The legal options are:

encoding convertfrom ?encoding? data
Convert data to a Tcl string from the specified encoding. The characters in data are treated as binary data where the lower 8-bits of each character is taken as a single byte. The resulting sequence of bytes is treated as a string in the specified encoding. If encoding is not specified, the current system encoding is used.
encoding convertto ?encoding? string
Convert string from a Tcl string to the specified encoding. The result is a sequence of characters that represents the converted string. Each byte in the target encoding may be obtained by iterating the result using string index. If encoding is not specified, the current system encoding is used.  The following example creates a list of integer codes showing the byte sequence of an encoded result:
   set text "caf\u00e9"   ;# café
   set unitext [encoding convertto unicode $text]
   set imax [string length $unitext]   ;# do not use string bytelength
   for {set i 0} {$i < $imax} {incr i} {
       set ch [string index $unitext $i]
       scan $ch %c ich
       lappend icodes $ich 
  puts $icodes

    99 0 97 0 102 0 233 0   ;# on littleEndian platforms
    0 99 0 97 0 102 0 233   ;# on bigEndian platforms
The unicode encoding results in a sequence of two byte integers that have your platform's big-endian or little-endian ordering. The tcl_platform(byteOrder) global variable specifies the order used.
encoding dirs ?directoryList?
Tcl can load encoding data files from the file system that describe additional encodings for it to work with. This command sets the search path for *.enc encoding data files to the list of directories directoryList. If directoryList is omitted then the command returns the current list of directories that make up the search path. It is an error for directoryList to not be a valid list. If, when a search for an encoding data file is happening, an element in directoryList does not refer to a readable, searchable directory, that element is ignored.
encoding names
Returns a list containing the names of all of the encodings that are currently available.
encoding system ?encoding?
Set the system encoding to encoding. If encoding is omitted then the command returns the current system encoding. The system encoding is used whenever Tcl passes strings to system calls.


It is common practice to write script files using a text editor that produces output in the euc-jp encoding, which represents the ASCII characters as single bytes and Japanese characters as two bytes. This makes it easy to embed literal strings that correspond to non-ASCII characters by simply typing the strings in place in the script. However, because the source command always reads files using the current system encoding, Tcl will only source such files correctly when the encoding used to write the file is the same. This tends not to be true in an internationalized setting. For example, if such a file was sourced in North America (where the ISO8859-1 is normally used), each byte in the file would be treated as a separate character that maps to the 00 page in Unicode. The resulting Tcl strings will not contain the expected Japanese characters. Instead, they will contain a sequence of Latin-1 characters that correspond to the bytes of the original string. The encoding command can be used to convert this string to the expected Japanese Unicode characters. For example,

	set s [encoding convertfrom euc-jp "\xA4\xCF"]
would return a string equivalent to “\u306F” which is the Hiragana letter HA.