Error when entering part of a two-byte symbol
Needs-Triage :mag:
### Prerequisites
- [x] Write a descriptive title.
- [x] Make sure you are able to repro it on the [latest released version](https://www.powershellgallery.com/packages/PSReadLine)
- [x] Search the existing issues, especially the pinned issues.
### Exception report
```console
### Environment
PSReadLine: 2.4.5
PowerShell: 7.6.1
OS: Microsoft Windows 10.0.26100
BufferWidth: 102
BufferHeight: 51
Last 102 Keys:
s t a r h s i Backspace Backspace Backspace h Backspace s h i p Spacebar e x p l a i n Enter
Backspace Enter
\ u f 1 8 8 Enter
e c g Backspace h o Spacebar \ u f 1 8 8 Enter
e c g i Spacebar Backspace Backspace Backspace h o Spacebar Enter
e c h o Spacebar � � Enter
e c h o Spacebar Enter
e c h o Spacebar � � Enter
e c h o Spacebar � � Backspace Backspace Backspace Spacebar � � Enter
UpArrow Backspace Enter
### Exception
System.Text.EncoderFallbackException: Unable to translate Unicode character \\uDB82 at index 5 to specified code page.
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.Encoding.GetBytesWithFallback(ReadOnlySpan`1 chars, Int32 originalCharsLength, Span`1 bytes, Int32 originalBytesLength, EncoderNLS encoder, Boolean throwForDestinationOverflow)
at System.Text.Encoding.GetBytesWithFallback(Char* pOriginalChars, Int32 originalCharCount, Byte* pOriginalBytes, Int32 originalByteCount, Int32 charsConsumedSoFar, Int32 bytesWrittenSoFar, EncoderNLS encoder)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Dispose(Boolean disposing)
at System.IO.TextWriter.Dispose()
at Microsoft.PowerShell.PSConsoleReadLine.<>c__DisplayClass104_0.<WriteHistoryRange>b__0()
at Microsoft.PowerShell.PSConsoleReadLine.<>c__DisplayClass104_0.<WriteHistoryRange>b__0()
at Microsoft.PowerShell.PSConsoleReadLine.WithHistoryFileMutexDo(Int32 timeout, Action action)
at Microsoft.PowerShell.PSConsoleReadLine.WriteHistoryRange(Int32 start, Int32 end, Boolean overwritten)
at Microsoft.PowerShell.PSConsoleReadLine.IncrementalHistoryWrite()
at Microsoft.PowerShell.PSConsoleReadLine.MaybeAddToHistory(String result, List`1 edits, Int32 undoEditIndex, Boolean fromDifferentSession, Boolean fromInitialRead)
at Microsoft.PowerShell.PSConsoleReadLine.InputLoop()
at Microsoft.PowerShell.PSConsoleReadLine.ReadLine(Runspace runspace, EngineIntrinsics engineIntrinsics, CancellationToken cancellationToken, Nullable`1 lastRunStatus)
```
### Screenshot
<img width="930" height="208" alt="Image" src="https://github.com/user-attachments/assets/a05e139b-c25d-49ca-b302-c9f45b29881a" />
### Environment data
```console
PS Version: 7.6.1
PS HostName: ConsoleHost (Windows Terminal)
PSReadLine Version: 2.4.5
PSReadLine EditMode: Windows
OS: 10.0.26100.1 (WinBuild.160101.0800)
BufferWidth: 102
BufferHeight: 51
```
### Steps to reproduce
1. Write `echo ` in the terminal. The character code is `\udb82\ude30`
2. Press up and delete the second char of the two byte symbol.
3. Crash.
### Expected behavior
No crash.
### Actual behavior
Crash.
0 条评论