Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No Splitting terminal in folder with ë character or any subdirectories errors and doesn't split. The terminal process failed to launch: Starting directory (cwd) "/Users/liam-nt/Documents/vscodebugtest/eÃ«e" does not exist. <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- VS Code Version: 1.74.0 (Universal) OS Version: macOS Monterey 12.5 (21G72) Steps to Reproduce: a folder containing 'ë' in name integrated VSCode terminal and split terminal by keyboard shortcut or interface.
related
!
Regression from is encoding all multibyte utf8 characters

Discussion:
for (( i=0; i < "${#str}"; ++i )); do byte="${str:$i:1}" <del> # Backslashes must be doubled. </del> <ins> # Escape backslashes and semi-colons </ins> if [ "$byte" = "" ]; then token="" <del> # Conservatively pass alphanumerics through. elif [[ "$byte" == [0-9A-Za-z] ]]; then token="$byte" # Hex-encode anything else. # (Importantly including: semicolon, newline, and control chars). </del> <ins> elif [ "$byte" = ";" ]; then token="x3b" </ins> else <del> # The printf '0x%02X' "'$byte'" converts the character to a hex integer. # See printf's specification: # > If the leading character is a single-quote or double-quote, the value shall be the numeric value in the # > underlying codeset of the character following the single-quote or double-quote. # However, the result is a sign-extended int, so a high bit like 0xD7 becomes 0xFFF…FD7 # We mask that word with 0xFF to get lowest 8 bits, and then encode that byte as "xD7" per our escaping scheme. builtin printf -v token 'x%02X' "$(( $(builtin printf '0x%X' "'$byte'") & 0xFF ))" #             |________| ^^^ ^^^                        ^^^^^^  ^^^^^^^  |______| #                   |     |  |                            |        |         | # store in `token` -+     |  |   the hex value -----------+        |         | # the 'x…'-prefixed -----+  |   of the byte as an integer --------+         | # 0-padded, two hex digits --+   masked to one byte (due to sign extension) -+ </del> <ins> token="$byte" </ins> fi out+="$token"

for (( i = 0; i < ${#str}; ++i )); do byte="${str:$i:1}" <del> # Backslashes must be doubled. </del> <ins> # Escape backslashes and semi-colons </ins> if [ "$byte" = "" ]; then token="" <del> # Conservatively pass alphanumerics through. elif [[ "$byte" == [0-9A-Za-z] ]]; then token="$byte" # Hex-encode anything else. # (Importantly including: semicolon, newline, and control chars). </del> <ins> elif [ "$byte" = ";" ]; then token="x3b" </ins> else <del> token="x${(l:2::0:)$(( [##16] #byte ))}" #            | |  |       |/|/ |_____| #            | |  |       | |     | # left-pad --+ |  |       | |     +- the byte value of the character # two digits --+  |       | +------- in hexadecimal # with '0' -------+       +--------- with no prefix </del> <ins> token="$byte" </ins> fi out+="$token"

# Escape a value for use in the 'P' ("Property") or 'E' ("Command Line") sequences. # Backslashes are doubled and non-alphanumeric characters are hex encoded. function __vsc_escape_value <del> # Replace all non-alnum characters with %XX hex form. string escape --style=url "$argv"  # The characters [-./_~] are not encoded in the builtin url escaping, despite not being alphanumeric. # See: https://github.com/fish-shell/fish-shell/blob/f82537bcdcb32f85a530395f00e7be1aa9afc592/src/common.cpp#L738 # For consistency, also encode those characters. | string replace --all '-' '%2D'  | string replace --all '.' '%2E'  | string replace --all '/' '%2F'  | string replace --all '_' '%5F'  | string replace --all '~' '%7E'  # Now everything is either alphanumeric [0-9A-Za-z] or %XX escapes. # Change the hex escape representation from '%' to 'x'. (e.g. ' ' → '%20' → 'x20'). # Note that all '%' characters are escapes: literal '%' will already have been encoded. | string replace --all '%' 'x'  # For readability, prefer to represent literal backslashes with doubling. ('' → '%5C' → 'x5C' → ''). | string replace --all --ignore-case '%5C' ''  </del> <ins> # Escape backslashes and semi-colons echo $argv  | string replace --all '' ''  | string replace --all ';' 'x3b'  </ins> ; end