【发布时间】:2011-01-17 19:54:05
【问题描述】:
我有一个场景,其中一些特殊字符以系统的默认编码存储在数据库 (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");
但是当我将这个 newString 输出到控制台时,我得到 ? 的特殊字符。
所以我有一些疑问:
- 如果我的转换逻辑是错误的,那我该如何纠正呢。
- 转换为 UTF-8 后,是否可以再次检查转换是否正常?我的意思是它是否需要发送给第三方的正确消息,我假设如果消息在转换后不是用户可读的,那么转换就有问题。
想听听所有专家的一些观点。
如果我需要任何进一步的信息,请告诉我。
【问题讨论】:
-
这似乎是您的控制台的问题,而不是转换,据我所知,这是可以的。您是否尝试将其写入文本文件而不是控制台并使用文本编辑器打开它?
-
你试过输出原始字符串吗?您的控制台使用的字体可能不包含这些字符
-
从 unicode 转换为 utf-8 并让字符正确显示的任务并非没有问题。一位联系人去年找到了解决方案。我会问他是怎么做到的。