Settings / Files: Candidate Guess Encodings (fix #239928) (#239968)

This commit is contained in:
Benjamin Pasero
2025-02-07 20:14:15 +01:00
committed by GitHub
parent e887b8e3d2
commit 5e68a2ea8c
2 changed files with 7 additions and 5 deletions
@@ -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) {
@@ -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 {