我在Java中的字符串变量中有以下值,其中UTF-8字符编码如下
Dodd\u2013Frank
而不是
Dodd–Frank
(假设我无法控制如何将此值分配给此字符串变量)
现在如何正确转换(编码)并将其存储回String
变量?
我找到了以下代码
Charset.forName("UTF-8").encode(str);
但这会返回ByteBuffer
,但我想要String
回来。
修改:
更多其他信息。
当我使用System.out.println(str);
时,我得到了
Dodd\u2013Frank
我不确定什么是正确的术语(UTF-8或unicode)。请原谅我。
答案 0 :(得分:50)
答案 1 :(得分:14)
您可以利用java.util.Properties支持带有'\ uXXXX'转义序列的字符串这样的事实,并执行以下操作:
Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));
不雅,但功能齐全。
答案 2 :(得分:0)
假设您有一个Unicode值,例如00B0(度数符号或上标'o',如西班牙语'primero'的缩写)
这是一个可以满足你想要的功能:
txToken = tx;
string query = string.Format("cmd =_notify-synch&tx={0}&at={1}",txToken,authToken);
string url = WebConfigurationManager.AppSettings["test_url"];
HttpWebRequest reqs = (HttpWebRequest) WebRequest.Create(url);
reqs.Method = "POST";
reqs.ContentType = "application/x-www-form-urlencoded";
reqs.ContentLength = query.Length;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
StreamWriter outStrmWriter = new StreamWriter(reqs.GetRequestStream(), Encoding.ASCII);
outStrmWriter.Write(query);
outStrmWriter.Close();
StreamReader reader = new StreamReader(reqs.GetResponse().GetResponseStream());
strReponse = reader.ReadToEnd();
reader.Close();
if (strReponse.StartsWith("SUCCESS"))
{
return strReponse;
}
else
{
return string.Empty;
}
}
答案 3 :(得分:0)
我使用StringEscapeUtils.unescapeXml
取消了从提供XML结果的API加载的字符串。
答案 4 :(得分:0)
UnicodeUnescaper
的 org.apache.commons:commons-text
也可以接受。
new UnicodeUnescaper().translate("Dodd\u2013Frank")
答案 5 :(得分:0)
试试
<块引用>str = org.apache.commons.text.StringEscapeUtils.unescapeJava(str);
因为 org.apache.commons.lang3.StringEscapeUtils 已被弃用。
答案 6 :(得分:-1)
您可以将该字节缓冲区转换为String,如下所示:
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.ByteBuffer
public static CharsetDecoder decoder = CharsetDecoder.newDecoder();
public static String byteBufferToString(ByteBuffer buffer)
{
String data = "";
try
{
// EDITOR'S NOTE -- There is no 'position' method for ByteBuffer.
// As such, this is pseudocode.
int old_position = buffer.position();
data = decoder.decode(buffer).toString();
// reset buffer's position to its original so it is not altered:
buffer.position(old_position);
}
catch (Exception e)
{
e.printStackTrace();
return "";
}
return data;
}
答案 7 :(得分:-1)
也许以下解决方案可以正确解码字符串,而无需任何其他依赖项。
这在scala repl中有效,尽管在仅Java解决方案中同样有效。
import java.nio.charset.StandardCharsets
import java.nio.charset.Charset
> StandardCharsets.UTF_8.decode(Charset.forName("UTF-8").encode("Dodd\u2013Frank"))
res: java.nio.CharBuffer = Dodd–Frank