我想让所有的客户从我的收获账户..。问题是密码包含一个§签名。我先把它拿走了,它起了作用,但现在我的老板告诉我,由于不同的原因,密码不能更改。我已经试过utf8encoding等了。
public List<Client> GetAllClients()
{
uri = "https://laios.harvestapp.com/clients";
using (WebClient webClient = new WebClient())
{
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Headers[HttpRequestHeader.Accept] = "application/json";
webClient.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword));
string response = webClient.DownloadString(uri);
clientsList = JsonConvert.DeserializeObject<List<Wrapper>>(response).Select(c => c.client).ToList();
}
}发布于 2016-03-21 13:17:34
我已经试过utf8encoding等了。
您在这里有点笼统,没有任何细节,但是UTF8可以很好地用这个符号对字符串进行编码和解码。
var mySTr = "My § sign";
var encoded = System.Text.Encoding.UTF8.GetBytes(mySTr);
var encoding2 = Convert.ToBase64String(encoded);
Console.WriteLine("Base64 encoded: " + encoding2);
var decoded = Convert.FromBase64String(encoding2);
var decodedStr = System.Text.Encoding.UTF8.GetString(decoded);
Console.WriteLine("Decoded again: " + decodedStr);
Debug.Assert(mySTr.Equals(decodedStr, StringComparison.Ordinal));编辑
注释:当密码包含§时,我得到一个错误401
还不清楚您正在与谁进行通信的服务是谁拥有的。如果这也在您的控制之下,那么您需要确保使用相同的编码来逆转密码。您不能在UTF8中发送它,并且在ASCII中解码时也不能期望得到相同的结果。如果您不拥有它,那么您需要与该方联系,并询问他们关于在ASCII允许字符集之外处理字符的建议(如果xanatos提出的解决方案不起作用)。
更多的是:如果您拥有这个服务,那么这不是一个好的实践。您正在发送一个未加密的未加密的密码通过网络(甚至通过一个公共网络,如互联网)!默默无闻的安全感从来都不是好的!只应发送密码的散列。如果不能这样做,那么它应该被加密,但哈希是首选。
发布于 2016-03-21 13:14:13
§不是ASCII,因为它的代码是167,即> 127。
您可以尝试使用Encoding.GetEncoding("windows-1252").GetBytes和/或Encoding.GetEncoding("iso-8859-1").GetBytes。若要区分这两者,请尝试使用€欧元符号的密码。windows-1252应该支持它,iso-8859-1不应该支持它。
请参见here,其中他们解释了通常编码应该是iso-8859-1。
https://stackoverflow.com/questions/36131785
复制相似问题