【问题标题】:Base64 Encoded String doesn't matchesBase64 编码字符串不匹配
【发布时间】:2014-03-16 15:47:19
【问题描述】:

我很沮丧。我有一个基本的 Http 授权。为此,我设置了一个HttpGetHeader。 此 Header 需要进行 Base64 编码。我是这样做的:

String acc = uname + ":" + pword;
byte[] a = acc.getBytes();
String header = "Basic " + new String(Base64.encode(a, Base64.DEFAULT));

但是这个编码的字符串不起作用。当我记录标题时,它会按照我的需要打印出来。 它看起来与String h = "Basic c2NodWsZXI6aGVpbmNA=="; 相同,这是有效的。 但是当我比较header.equals(h);header==h 他们都是false。 最后,当我将标题设置为 header 时它不起作用,但是当我使用 h 它时它起作用。我猜它与字符串编码有关,但我尝试了 .getBytes("UTF-8") 和类似(ASCII,UTF-16)的不同方式,但它们都不起作用。 用户名和密码是普通的字符和数字。

任何人都可以看到错误吗?谢谢 格雷维斯

【问题讨论】:

  • header.equals(h) 返回 false 表示字符串不相同。 header==h 应返回 false,因为它们不是同一个引用。在使用header.equals(h) 比较它们之前,尝试记录您的headerh。试试header.equalsIgnoreCase(h)以防万一。
  • 03-16 16:57:42.200: I/HHG(28725): Basic c2NodWsZXI6aGVpbmNA== 03-16 16:57:42.200: I/HHG(28725): Basic c2NodWsZXI6aGVpbmNA== 我正在记录它们,它们和我一样。 .equalsIgnoreCase 返回 false
  • 可能是空格?试试header.trim().equals(h.trim())
  • 嗯,这很难说。它可能来自encode 函数。以后有时间再看看吧:)
  • 好的,那就回答我的问题,这样我就可以正确地勾选它。谢啦。 :)

标签: java android encoding base64


【解决方案1】:

header.equals(h) 返回 false 表示字符串不相同。 header==h 应返回 false,因为它们不是同一个引用。

可能是空格?试试header.trim().equals(h.trim())

【讨论】:

    【解决方案2】:

    尝试使用 base64.encodestring(s)

    【讨论】:

    • 没有Base64.encodestring,而是.encodeToString。我也试过了,还是不行
    • 您使用的是哪个版本的python。我在 docs.python.org/2/library/base64.html 看到了那个 api
    • 没有,我正在使用 java,正如标签所示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2014-03-03
    • 2011-04-22
    • 2018-12-28
    • 1970-01-01
    相关资源
    最近更新 更多