Java UTF8编码

one*_*ist 5 java utf-8

我有一个场景,其中一些特殊字符存储在系统默认编码的数据库(sybase)中,我必须获取此数据并使用Java程序将其发送到UTF-8编码的第三方.

前提条件是发送给第三方的数据不应超过定义的最大大小.由于在转换为UTF-8时,一个字符可能被2或3个字符替换,然后我的逻辑规定在从数据库获取数据后,我必须将其编码为UTF-8字符串然后拆分字符串.以下是我的观察:

当遇到任何特殊字符,如中文或希腊字符或任何特殊字符> ASCII 256时,当我将其转换为UTF-8时,单个字符可能由超过1个字节表示.

那么我怎样才能确定转换是否合适?对于转换,我使用以下内容

// storing the data from database into string
string s = getdata from the database;

// converting all the data in byte array utf8 encoding
byte [] b = s.getBytes("UTF-8");

// creating a new string as my split logic is based on the string format

String newString = new String(b,"UTF-8");
Run Code Online (Sandbox Code Playgroud)

但是当我将这个newString输出到控制台时,我得到?了特殊字符.

所以我有些疑惑:

  • 如果我的转换逻辑错误,那我怎么能纠正它.
  • 转换为UTF-8后,我可以仔细检查我的转换是否正常?我的意思是它是需要发送给第三方的正确消息,我假设如果消息在转换后不是用户可读的,那么转换有一些问题.

希望得到所有专家的一些观点.

如果我方需要进一步的信息,请告诉我.

ddy*_*yer 0

Java字符串是unicode的,但并不是所有的java组件都支持完整的unicode字符串,尤其是AWT组件和轻量级的swing组件。因此,您可能拥有完美的字符串,但在控制台输出中却出现了垃圾。