2013-01-03 174 views
2

在一個PlayN項目,我有以下的Java代碼字節緩衝區爲字符串GWT

import com.google.common.base.Charsets; 
import java.nio.ByteBuffer; 

ByteBuffer msg = ... // a ByteBuffer that contains a String 
String s = Charsets.UTF_8.decode(msg).toString(); 

能正常工作在Java中,但是當我嘗試使用GWT編譯它,我得到:

The method decode(ByteBuffer) is undefined for the type Charset

在GWT中,在ByteBuffer中獲取一個String(用UTF-8編碼)的正確方法是什麼?

+1

'ByteBuffer' [不支持](https://developers.google.com/web-toolkit/doc/latest/RefJreEmulation)所以它怎麼不會早點失效?你是否正在使用一些第三方庫來仿效客戶端的ByteBuffer? –

+0

哎呀,是的,我忘了提及:我使用模擬java.nio的PlayN(主要是Buffers),請參閱https://github.com/threerings/playn/tree/master/html/super/playn/super/java – AndresQ

回答

4

使用ByteBuffer#get(byte[])作爲byte[]將字節從ByteBuffer中取出後,您應該能夠使用new String(bytes, "UTF-8")
此構造函數String連同getBytes(String)以UTF-8和ISO-8859-1實現。

+0

我一直在尋找一個非常複雜的解決方案,實際上就是這麼簡單......謝謝! – AndresQ

+0

如果您查看gwt super-source,您會看到String默認爲UTF-8;不過,如果這是共享代碼,Thomas的答案就是跨平臺的正確解決方案。 Nit:Gwt還支持使用「ISO-LATIN-1」的拉丁:) – Ajax