well I did a little test in C: #include <stdio.h> void printStr(const char* str){ printf("%s\n", str); } int main() { printStr("\327\220\327\221\327\233=\327\222"); }
breakpoint in printStr and echo the value of str: % gdb a.out GNU gdb (GDB) 7.12 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from a.out...done. (gdb) break printStr Breakpoint 1 at 0x400502: file test.c, line 4. (gdb) run Starting program: /tmp/a.out Breakpoint 1, printStr (str=0x4005b4 "אבכ=ג") at test.c:4 4 printf("%s\n", str); (gdb) p str $1 = 0x4005b4 "אבכ=ג" (gdb) Gdb prints that value just fine. It's your node.js that converts the utf8 of the string into escape sequences in the first place.