编程语言
首页 > 编程语言> > java – StringBuffer类和中文字符编码

java – StringBuffer类和中文字符编码

作者:互联网

我写了一个方法来返回一个包含中文字符的字符串.

public printChineseMenu(){
   StringBuffer buffer;
   buffer.append(chinese string returned from DB);     //chinese characters appear in SQL
   System.out.println(buffer);                         //they appear as question marks
   PrintStream out = new PrintStream(System.out, true, "UTF-8");
   out.println(buffer);                                //chinese characters appear

   return (buffer.toString())
}

是否存在比StringBuffer类更好的存储/返回中文字符串的类型

解决方法:

这里的问题不是StringBuffer – 它只是System.out使用的编码.在不使用StringBuffer的情况下直接打印字符串时,您会发现完全相同的行为.

StringBuffer(及其更现代,非线程安全的等价物,StringBuilder,你应该使用它)不关心编码本身 – 它们只使用UTF-16代码单元序列.它们将正确保留所有Unicode数据. String也是如此.

你的方法几乎肯定只返回一个String – 但如果你不需要用字符串做任何“构建”(附加其他部分),那么使用StringBuffer或StringBuilder就没有意义了.如果你确实需要从多个字符串构建reslut字符串,你可以使用它们中的任何一个,并且只返回你已经在做的toString()的结果(尽管返回值周围的括号是无关紧要的;返回不是一种方法).

在字符串数据方面,控制台通常会产生误导.如有疑问,请一次打印一个UTF-16代码单元序列,然后找出其意义.这样就没有编码或不可打印字符成为问题的危险.

标签:stringbuffer,chinese-locale,java,string,encoding
来源: https://codeday.me/bug/20190728/1562556.html