我写了一个方法来返回一个包含中文字符的字符串.
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代码单元序列,然后找出其意义.这样就没有编码或不可打印字符成为问题的危险.