Sample code for 30+ languages & platforms
Tcl Requires Chilkat v11.1.0+

Unicode Escape and Unescape Text in StringBuilder

Demonstrates options for unicode escaping non-us-ascii chars and emojis.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set sbOriginal [new_CkStringBuilder]

set success [CkStringBuilder_LoadFile $sbOriginal "qa_data/txt/utf16_emojis_accented_jap.txt" "utf-16"]
if {$success == 0} then {
    puts [CkStringBuilder_lastErrorText $sbOriginal]
    delete_CkStringBuilder $sbOriginal
    exit
}

#  The above file contains the following text, which includes some emoji's,
#  Japanese chars, and accented chars.

set sb [new_CkStringBuilder]

CkStringBuilder_AppendSb $sb $sbOriginal

#  Charset is not used for unicode escaping.  Set it to "utf-8", but it means nothing.
set charsetNotUsed "utf-8"

#  Indicate the desired format/style of Unicode escaping.
#  Choose JSON-style (JavaScript-style) Unicode escape sequences by using "unicodeescape"
set encoding "unicodeescape"

CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  \ud83e\udde0
#  \ud83d\udd10
#  \u2705
#  \u26a0\ufe0f
#  \u274c
#  \u2713
#  \u4e2d
#  \u00e9 xyz \u00e0
#  abc \u79c1 \u306f \u3093 ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#  Do the same, but use uppercase letters (A-F) in the hex values.
set encoding "unicodeescape-upper"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  \uD83E\uDDE0
#  \uD83D\uDD10
#  \u2705
#  \u26A0\uFE0F
#  \u274C
#  \u2713
#  \u4E2D
#  \u00E9 xyz \u00E0
#  abc \u79C1 \u306F \u3093 ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#   ECMAScript (JavaScript) �code point escape� syntax

set encoding "unicodeescape-curly"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  \u{d83e}\u{dde0}
#  \u{d83d}\u{dd10}
#  \u{2705}
#  \u{26a0}\u{fe0f}
#  \u{274c}
#  \u{2713}
#  \u{4e2d}
#  \u{00e9} xyz \u{00e0}
#  abc \u{79c1} \u{306f} \u{3093} ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#  Do the same, but use uppercase letters (A-F) in the hex values.
set encoding "unicodeescape-curly-upper"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  \u{D83E}\u{DDE0}
#  \u{D83D}\u{DD10}
#  \u{2705}
#  \u{26A0}\u{FE0F}
#  \u{274C}
#  \u{2713}
#  \u{4E2D}
#  \u{00E9} xyz \u{00E0}
#  abc \u{79C1} \u{306F} \u{3093} ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#  HTML hexadecimal character reference

set encoding "unicodeescape-htmlhex"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  🧠
#  🔐
#  ✅
#  ⚠️
#  ❌
#  ✓
#  中
#  é xyz à
#  abc 私 は ん ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#  HTML decimal character reference

set encoding "unicodeescape-htmldec"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  🧠
#  🔐
#  ✅
#  ⚠️
#  ❌
#  ✓
#  中
#  é xyz à
#  abc 私 は ん ghi

#  Revert back to the unescaped chars:
CkStringBuilder_Decode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  -----------------------------------------------------------------------------------------
#  Unicode code point notation or U+ notation

set encoding "unicodeescape-plus"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  u+1f9e0
#  u+1f510
#  u+2705
#  u+26a0u+fe0f
#  u+274c
#  u+2713
#  u+4e2d
#  u+00e9 xyz u+00e0
#  abc u+79c1 u+306f u+3093 ghi

#  Chilkat cannot unescape the Unicode code point notation or U+ notation.
#  For this style, Chilkat only goes in one direction, which is to escape.

#  To emit uppercase hex, specify unicodeescape-plus-upper
set encoding "unicodeescape-plus-upper"
#  ...
#  ...

CkStringBuilder_Clear $sb
CkStringBuilder_AppendSb $sb $sbOriginal

#  -----------------------------------------------------------------------------------------
#  Hex in Angle Brackets

set encoding "unicodeescape-angle"
CkStringBuilder_Encode $sb $encoding $charsetNotUsed
puts [CkStringBuilder_getAsString $sb]

#  Output:
#  <1f9e0>
#  <1f510>
#  <2705>
#  <26a0><fe0f>
#  <274c>
#  <2713>
#  <4e2d>
#  <e9> xyz <e0>
#  abc <79c1> <306f> <3093> ghi

#  Chilkat cannot unescape the angle bracket notation.
#  For this style, Chilkat only goes in one direction, which is to escape.

CkStringBuilder_Clear $sb
CkStringBuilder_AppendSb $sb $sbOriginal

delete_CkStringBuilder $sbOriginal
delete_CkStringBuilder $sb