【问题标题】:byte[] to String not working correctly字节 [] 到字符串无法正常工作
【发布时间】:2017-02-18 13:14:27
【问题描述】:

现在从上一个问题开始,我得到了 NTLM 握手工作。现在,当我从 byte[] 转换为 String 时,我无法过滤掉空格。我的结果如下所示:

CHAR: A
CHAR:
CHAR: B
CHAR: 
CHAR: C

USERNAME: A B C

这是产生此输出的代码:

username = new String( token, offset, length, "ISO-8859-1" );
username = username.trim();

char[] test = username.toCharArray();
for ( char t : test )
{
  if ( !Character.isWhitespace( t ) )
  {
    System.out.println( "CHAR: " + t );
  }
}
System.out.println( "USERNAME: " + username );

我什至检查过String.valueOf(t).isEmpty()String.valueOf(t).equals(" ")。 一直以来似乎并非如此,并且打印了字符。我什至用 || 一次性全部使用但每个人都真的“正确”。

我从另一个类得到这样的输入:

String auth = httpServletRequest.getHeader( "Authorization" );
String username = authService.getUserNameFromNTLM( auth.substring( 5 ));

并将字符串转换为字节[],如下所示:

byte[] token = Base64.getDecoder().decode( msg );

我需要的输出是 ABC。有人能告诉我为什么我的程序是错误的吗?

【问题讨论】:

  • 您确定字节数组是以 ISO-8859-1 而不是 UTF-16 编码的吗?
  • 您是否尝试过查看 char 的数值并将其与空格的预期数值进行比较?此外,在 IDE 中设置断点可能会产生奇迹。
  • @亨利,我得到一个NTLM V3令牌喜欢这篇文章中innovation.ch/personal/ronald/ntlm.html我的令牌看起来是这样的:TlRMTVNTUAADAAAAGAAYAHIAAAAYABgAigAAABQAFABAAAAADAAMAFQAAAASABIAYAAAAAAAAACiAAAAAYIAAFUAUgBTAEEALQBNAEkATgBPAFIAWgBhAHAAaABvAGQATABJAEcASABUAEMASQBUAFkArYfKbe / jRoW5xDxHeoxC1gBmfWiS5 + iX4OAN4xBKG / IFPwfH3agtPEia6YnhsADT SPAN>
  • 这个文件说username string (unicode UTF-16LE)
  • 该死的...我忽略了这一点。我现在将尝试使用 UTF-16LE 字符集进行转换。

标签: java arrays string char converter


【解决方案1】:

消息中的用户名采用 UTF-16LE 编码,而不是 ISO-8859-1。

您当前在字符串中看到的是源自错误解码的 NUL 字符。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 2017-01-22
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多