From 5e68a2ea8cf0dcacbb2b91704cd10f1aa9cbb56d Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 7 Feb 2025 20:14:15 +0100 Subject: [PATCH] Settings / Files: Candidate Guess Encodings (fix #239928) (#239968) --- .../contrib/preferences/browser/settingsEditor2.ts | 2 +- src/vs/workbench/services/textfile/common/encoding.ts | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 48f25cff467..b0a2617012f 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -670,7 +670,7 @@ export class SettingsEditor2 extends EditorPane { const targetWidgetContainer = DOM.append(headerControlsContainer, $('.settings-target-container')); this.settingsTargetsWidget = this._register(this.instantiationService.createInstance(SettingsTargetsWidget, targetWidgetContainer, { enableRemoteSettings: true })); this.settingsTargetsWidget.settingsTarget = ConfigurationTarget.USER_LOCAL; - this.settingsTargetsWidget.onDidTargetChange(target => this.onDidSettingsTargetChange(target)); + this._register(this.settingsTargetsWidget.onDidTargetChange(target => this.onDidSettingsTargetChange(target))); this._register(DOM.addDisposableListener(targetWidgetContainer, DOM.EventType.KEY_DOWN, e => { const event = new StandardKeyboardEvent(e); if (event.keyCode === KeyCode.DownArrow) { diff --git a/src/vs/workbench/services/textfile/common/encoding.ts b/src/vs/workbench/services/textfile/common/encoding.ts index 599f2309e6a..c87a2745682 100644 --- a/src/vs/workbench/services/textfile/common/encoding.ts +++ b/src/vs/workbench/services/textfile/common/encoding.ts @@ -338,9 +338,11 @@ async function guessEncodingByBuffer(buffer: VSBuffer, candidateGuessEncodings?: } } - const guessed = jschardet.detect(binaryString, candidateGuessEncodings ? { detectEncodings: candidateGuessEncodings } : undefined); - if (!guessed || !guessed.encoding) { - return null; + let guessed: { encoding: string }; + try { + guessed = jschardet.detect(binaryString, candidateGuessEncodings ? { detectEncodings: candidateGuessEncodings } : undefined); + } catch (error) { + return null; // jschardet throws for unknown encodings (https://github.com/microsoft/vscode/issues/239928) } const enc = guessed.encoding.toLowerCase(); @@ -371,7 +373,7 @@ function toJschardetEncoding(encodingName: string): string | undefined { const normalizedEncodingName = normalizeEncoding(encodingName); const mapped = GUESSABLE_ENCODINGS[normalizedEncodingName]; - return mapped.guessableName; + return mapped ? mapped.guessableName : undefined; } function encodeLatin1(buffer: Uint8Array): string {