|07:38||Fix more corner-cases like [0e92c404f1]: The only place wher... check-in: 91be696bf3 user: jan.nijtmans tags: core-8-5-branch|
|21:59||Better (safer) fix for [0e92c404f1] check-in: b8c06f813e user: jan.nijtmans tags: core-8-5-branch|
|20:38||• Closed ticket [0e92c404f1]: Side effect on string range command (from encoding and format commands) plus 7 other changes artifact: 685bd28123 user: jan.nijtmans|
|20:22||Fix [0e92c404f1]: Side effect on string range command (from encoding and format commands) Closed-Leaf check-in: 77a7d8d123 user: jan.nijtmans tags: mistake|
|16:54||• New ticket [0e92c404f1] Side effect on string range command (from encoding and format commands). artifact: ac313facd8 user: anonymous|
|Title:||Side effect on string range command (from encoding and format commands)|
|Submitter:||anonymous||Created on:||2014-04-30 16:54:49|
|Subsystem:||16. Commands A-H||Assigned To:||jan.nijtmans|
|Status:||Closed||Last Modified:||2014-04-30 20:38:01|
|Closed on:||2014-04-30 20:38:01|
Hi all, I found one very confusing behavior in tcl. set x "\u5317\u4eac" # Beijing in Chinese set y $x puts "x: '$x' -> '[string range $x 0 100]''" puts "y: '$y'" encoding convertfrom "iso8859-1" $y puts "y: '$y'" # format "%s" $y puts "x: '$x' -> '[string range $x 0 100]'" output: x: '北京' -> '北京'' y: '北京' y: '北京' x: '北京' -> '¬' if we uncomment second to last line above output is ok: x: '北京' -> '北京'' y: '北京' y: '北京' x: '北京' -> '北京' encoding and format commands have side effects on string range command (In the second example they negate each other producing good result). Pay attention that neither x nor y were manipulated in any way. However string range command seems to be affected. I use tcl 8.5. Thanks, Nikola
jan.nijtmans added on 2014-04-30 20:38:01:
Fixed in [77a7d8d123] (core-8-5-branch). In trunk, the fix was already applied more than 5 years ago ([ee4709ceaf], thanks to dkf), so I just backported dkf's fix.
Explanation: The "encoding convertfrom" command creates an internal byte array representation from the string, and "string range" tries to make smart use of the byte array representation. But that shortcut was simply wrong.