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

Unicode Escape

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

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oSb
LOCAL cOriginal
LOCAL oCrypt
LOCAL cCharsetNotUsed
LOCAL cEncoding
LOCAL cEscaped
LOCAL cUnescaped

nSuccess := 0

oSb := CreateObject("Chilkat.StringBuilder")
nSuccess := oSb:LoadFile("qa_data/txt/utf16_emojis_accented_jap.txt", "utf-16")
IF (nSuccess == 0)
    ? oSb:LastErrorText
    oSb:destroy()
    RETURN
ENDIF

cOriginal := oSb:GetAsString()

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

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

oCrypt := CreateObject("Chilkat.Crypt2")

//  Charset is not used for unicode escaping.  Set it to "utf-8", but it means nothing.
cCharsetNotUsed := "utf-8"

//  Indicate the desired format/style of Unicode escaping.
//  Choose JSON-style (JavaScript-style) Unicode escape sequences by using "unicodeescape"
cEncoding := "unicodeescape"

cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

//  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:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

//  -----------------------------------------------------------------------------------------
//  Do the same, but use uppercase letters (A-F) in the hex values.
cEncoding := "unicodeescape-upper"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

//  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:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

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

cEncoding := "unicodeescape-curly"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

//  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:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

//  -----------------------------------------------------------------------------------------
//  Do the same, but use uppercase letters (A-F) in the hex values.
cEncoding := "unicodeescape-curly-upper"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

//  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:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

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

cEncoding := "unicodeescape-plus"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

//  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
cEncoding := "unicodeescape-plus-upper"
//  ...
//  ...

//  -----------------------------------------------------------------------------------------
//  HTML hexadecimal character reference

cEncoding := "unicodeescape-htmlhex"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

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

//  Revert back to the unescaped chars:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

//  -----------------------------------------------------------------------------------------
//  HTML decimal character reference

cEncoding := "unicodeescape-htmldec"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

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

//  Revert back to the unescaped chars:
cUnescaped := oCrypt:DecodeString(cEscaped, cCharsetNotUsed, cEncoding)
? cUnescaped

//  -----------------------------------------------------------------------------------------
//  Hex in Angle Brackets

cEncoding := "unicodeescape-angle"
cEscaped := oCrypt:EncodeString(cOriginal, cCharsetNotUsed, cEncoding)
? cEscaped

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

oSb:destroy()
oCrypt:destroy()