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