You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
2.2 KiB
46 lines
2.2 KiB
set existing_enc [encoding system] |
|
#Any "puts" before setting 'encoding system' will set the existing system encoding on the channel (others too, but depending if console vs piped) |
|
#e.g |
|
### puts stderr test |
|
#Uncommenting the above will mean that both stdout and stderr (when in a piped-situation, ie no console) are initialised to existing_enc - not the one we set below! |
|
set arg_setencoding [lindex $::argv 0] |
|
if {$arg_setencoding ne ""} { |
|
if {$arg_setencoding ni [encoding names]} { |
|
puts stderr "Usage: encoding.tcl ?tcl_encoding?" |
|
puts stderr "(Note difference in stdout/stderr encodings when piped: e.g encoding.tcl cp437 | cat)" |
|
puts stderr "encoding names:\n" |
|
puts stderr "[encoding names]" |
|
exit 1 |
|
} |
|
encoding system $arg_setencoding |
|
} else { |
|
encoding system utf-8 |
|
} |
|
puts "original encoding system : $existing_enc" |
|
puts "configured encoding system: [encoding system]" |
|
puts "stdout: [chan conf stdout]" |
|
puts "stderr: [chan conf stderr]" |
|
puts "[lindex $::argv 0]" |
|
|
|
#compare: |
|
#1) both stderr and stdout are to console - not affected by changed system encoding |
|
#>tclsh encoding.tcl |
|
# original encoding system : utf-8 |
|
# configured encoding system: utf-8 |
|
# stdout: -blocking 1 -buffering line -buffersize 4096 -encoding utf-16 -eofchar {} -profile tcl8 -translation crlf -winsize {224 57} |
|
# stderr: -blocking 1 -buffering none -buffersize 4096 -encoding utf-16 -eofchar {} -profile tcl8 -translation crlf -winsize {224 57} |
|
|
|
#2) stdout not going to console |
|
#>tclsh encoding.tcl | cat |
|
# original encoding system : utf-8 |
|
# configured encoding system: utf-8 |
|
# stdout: -blocking 1 -buffering line -buffersize 4096 -encoding utf-8 -eofchar {} -profile tcl8 -translation crlf |
|
# stderr: -blocking 1 -buffering none -buffersize 4096 -encoding utf-16 -eofchar {} -profile tcl8 -translation crlf -winsize {224 57} |
|
|
|
#3) neither channel to console |
|
#>tclsh encoding.tcl |& cat |
|
# original encoding system : utf-8 |
|
# configured encoding system: utf-8 |
|
# stdout: -blocking 1 -buffering line -buffersize 4096 -encoding utf-8 -eofchar {} -profile tcl8 -translation crlf |
|
# stderr: -blocking 1 -buffering none -buffersize 4096 -encoding utf-8 -eofchar {} -profile tcl8 -translation crlf |
|
|
|
|