From f651d1202ea7ab7e1e661ee26e9209e94a99ca8c Mon Sep 17 00:00:00 2001 From: Yaohai Zheng Date: Thu, 13 Jul 2017 09:48:46 +0800 Subject: [PATCH] Refine codepage mapping. --- misc/codepageMapping.json | 4 ++++ src/common/util.ts | 35 ++++++++++++----------------------- 2 files changed, 16 insertions(+), 23 deletions(-) create mode 100644 misc/codepageMapping.json diff --git a/misc/codepageMapping.json b/misc/codepageMapping.json new file mode 100644 index 00000000..f498b022 --- /dev/null +++ b/misc/codepageMapping.json @@ -0,0 +1,4 @@ +{ + "936": "GBK", + "932": "Shift_JIS" +} \ No newline at end of file diff --git a/src/common/util.ts b/src/common/util.ts index 00b7e549..9d23b7c7 100644 --- a/src/common/util.ts +++ b/src/common/util.ts @@ -10,6 +10,8 @@ import * as properties from "properties"; import * as vscode from "vscode"; import * as WinReg from "winreg"; +const encodingMapping: object = JSON.parse(fs.readFileSync(path.join(__dirname, "../../../misc", "codepageMapping.json"), "utf8")); + /** * This function will return the VSCode C/C++ extesnion compatible platform literals. * @function getCppConfigPlatform @@ -211,30 +213,10 @@ export function spawn(command: string, outputChannel: vscode.OutputChannel, args if (outputChannel) { child.stdout.on("data", (data: Buffer) => { - switch (codepage) { - case "932": - outputChannel.append(iconv.decode(data, "Shift_JIS")); - break; - case "936": - outputChannel.append(iconv.decode(data, "GBK")); - break; - default: - outputChannel.append(data.toString()); - break; - } + outputChannel.append(decodeData(data, codepage)); }); child.stderr.on("data", (data: Buffer) => { - switch (codepage) { - case "932": - outputChannel.append(iconv.decode(data, "Shift_JIS")); - break; - case "936": - outputChannel.append(iconv.decode(data, "GBK")); - break; - default: - outputChannel.append(data.toString()); - break; - } + outputChannel.append(decodeData(data, codepage)); }); } @@ -250,6 +232,13 @@ export function spawn(command: string, outputChannel: vscode.OutputChannel, args }); } +export function decodeData(data: Buffer, codepage: string): string { + if (encodingMapping.hasOwnProperty(codepage)) { + return iconv.decode(data, encodingMapping[codepage]); + } + return data.toString(); +} + export function tryParseJSON(jsonString: string) { try { const jsonObj = JSON.parse(jsonString); @@ -397,5 +386,5 @@ export function getRegistryValues(hive: string, key: string, name: string): Prom } export function convertToHex(number, width = 0) { - return padStart(number.toString(16), width, "0"); + return padStart(number.toString(16), width, "0"); }