From 41cdca649fa3ef8bbaee98c2a903d7d4b582dd19 Mon Sep 17 00:00:00 2001 From: StudentEx Date: Tue, 18 Sep 2018 13:39:58 +0800 Subject: [PATCH] Retry with UTF16LE when parse sysproxy output fail --- shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs b/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs index 7248fded..d409b00d 100644 --- a/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs +++ b/shadowsocks-csharp/Util/SystemProxy/Sysproxy.cs @@ -193,6 +193,16 @@ namespace Shadowsocks.Util.SystemProxy private static void ParseQueryStr(string str) { string[] userSettingsArr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + // sometimes sysproxy output in utf16le instead of ascii + // manually translate it + if (userSettingsArr.Length == 1) + { + byte[] strByte = Encoding.ASCII.GetBytes(str); + str = Encoding.Unicode.GetString(strByte); + userSettingsArr = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + } + _userSettings.Flags = userSettingsArr[0]; // handle output from WinINET