From 651f1cb156ecd8a51df3d8527e0e0f7837f9d843 Mon Sep 17 00:00:00 2001 From: Mihael S Date: Thu, 3 Feb 2022 23:30:23 +0100 Subject: [PATCH 1/2] python3 bytes/str support resolves "TypeError: write() argument must be str, not bytes" --- notebook_xterm/terminalserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebook_xterm/terminalserver.py b/notebook_xterm/terminalserver.py index d61c274..9e50df6 100644 --- a/notebook_xterm/terminalserver.py +++ b/notebook_xterm/terminalserver.py @@ -37,7 +37,7 @@ def receive(self): data = os.read(self.fd, 8192) except OSError: data = b'' - sys.stdout.write(base64.b64encode(data)) + sys.stdout.write(base64.b64encode(data).decode('utf-8')) def update_window_size(self, rows, cols): #notify that the pty size should change to match xterm.js From b5e990f4bdeab12d73a8baaae8e15a79d4737655 Mon Sep 17 00:00:00 2001 From: Mihael S Date: Thu, 3 Feb 2022 23:33:12 +0100 Subject: [PATCH 2/2] handle non-latin letters resolves "InvalidCharacterError: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range." --- notebook_xterm/terminalclient.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notebook_xterm/terminalclient.js b/notebook_xterm/terminalclient.js index ca13742..06be216 100644 --- a/notebook_xterm/terminalclient.js +++ b/notebook_xterm/terminalclient.js @@ -120,7 +120,7 @@ TerminalClient.prototype.receive_data_callback = function(data) { } try { - var decoded = atob(data.content.text); + var decoded = decodeURIComponent(escape(window.atob(data.content.text))); this.term.write(decoded); } catch(e) { @@ -147,7 +147,7 @@ TerminalClient.prototype.handle_transmit = function(data) { this.curPollInterval = MIN_POLL_INTERVAL; // transmit data to the server, but b64 encode it - this.server_exec(PY_TERMINAL_SERVER + '.transmit(b"' + btoa(data) + '")'); + this.server_exec(PY_TERMINAL_SERVER + '.transmit(b"' + btoa(unescape(encodeURIComponent(data))) + '")'); } TerminalClient.prototype.handle_resize = function() {