【问题标题】:Comparing Strings in MATLAB Problem比较 MATLAB 中的字符串问题
【发布时间】:2011-08-03 16:58:32
【问题描述】:

我一直在摆弄我的程序,并且一直在使用允许 BASIC 身份验证的 urlread 的修改版本。问题是我必须在基本 urlread 函数中包含以下代码行:

urlConnection.setRequestProperty('Authorization', 'Basic passphrase');

...其中密码是 'user:pass' 的 base64 编码字符串。如果我将密码直接放入该行的字符串中,程序将正常工作,但当我尝试连接以获取生成的“基本密码”字符串时,麻烦就开始了。最初我只有:

['Basic', ' ', passphrase]

在那之后我在命令窗口中做了一些探索和试验。:

passphrase = 'somerandompassphrase';
teststr1 = ['Basic', ' ', passphrase];
teststr2 = ['Basic', ' ', 'somerandompassphrase'];
teststr3 = 'Basic somerandompassphrase';
strcmp(teststr1, teststr2)
strcmp(teststr1, teststr3)
strcmp(teststr2, teststr3)

输出为 1,或者每个都为真(如预期的那样)。但是,如果我采用 'somerandompassphrase' 的 base64 编码(即 'c29tZXJhbmRvbXBhc3NwaHJhc2U='):

encoded = base64encode(passphrase);
teststr1 = ['Basic', ' ', encoded];
teststr2 = ['Basic', ' ', 'c29tZXJhbmRvbXBhc3NwaHJhc2U='];
strcmp(teststr1, teststr2)

输出为 0,或为假。不应该是真的吗? base64encode函数可以在here找到。

即使是快速测试:

strcmp(encoded, 'c29tZXJhbmRvbXBhc3NwaHJhc2U=')

输出还是0。

请帮忙,我不知道发生了什么。

【问题讨论】:

    标签: string matlab base64 encode


    【解决方案1】:

    如图here 所示,您还可以使用Apache Commons Codec Java 库中的base64 编码器,该库与 MATLAB 捆绑在一起并在类路径中可用:

    encoder = org.apache.commons.codec.binary.Base64();
    b64str = char( encoder.encode(passphrase-0) )';
    

    【讨论】:

      【解决方案2】:

      实际上,我在发布问题之前就想到了这一点,但我想我会继续下去,以防人们遇到和我一样的问题。

      问题来自 base64encode 函数。它会自动在字符串末尾添加一个换行符,导致 strcmp 函数返回 false。要解决此问题,您可以在 base64encode 函数中包含一个可选参数的参数,如果您输入一个空白字符串,它不会在其末尾添加换行符,从而使其工作。

      encoded = base64encode(passphrase, '');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 2017-09-18
        • 1970-01-01
        相关资源
        最近更新 更多