Sample code for 30+ languages & platforms
Tcl

Unicode Escape

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

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set sb [new_CkStringBuilder]

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

set original [CkStringBuilder_getAsString $sb]

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

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

set crypt [new_CkCrypt2]

# 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"

set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

# 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:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

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

# 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:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

# -----------------------------------------------------------------------------------------
#  ECMAScript (JavaScript) “code point escape” syntax

set encoding "unicodeescape-curly"
set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

# 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:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

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

# 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:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

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

set encoding "unicodeescape-plus"
set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

# 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"
# ...
# ...

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

set encoding "unicodeescape-htmlhex"
set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

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

# Revert back to the unescaped chars:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

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

set encoding "unicodeescape-htmldec"
set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

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

# Revert back to the unescaped chars:
set unescaped [CkCrypt2_decodeString $crypt $escaped $charsetNotUsed $encoding]
puts "$unescaped"

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

set encoding "unicodeescape-angle"
set escaped [CkCrypt2_encodeString $crypt $original $charsetNotUsed $encoding]
puts "$escaped"

# 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.

delete_CkStringBuilder $sb
delete_CkCrypt2 $crypt