String 在Java中处理utf-8字符串

String 在Java中处理utf-8字符串,string,utf-8,String,Utf 8,我有一个应用程序,它使用ajax调用从active directory中提取域的名称。有些名称具有西班牙语字符(例如n波浪形)。我使用utf-8字符集来获得正确显示表单上数据的字符。我可以成功地从ajax调用中提取名称并将其加载到表单字段中。我遇到的问题是,当表单发布到服务器进行数据库更新时,字符串转换会损坏扩展字符 是否有处理utf-8的特殊字符串函数?获取发布到Oracle表的正确值的正确方法是什么 我已经做了相当多的Java编码,但这是我第一次遇到扩展字符。任何帮助都将不胜感激 谢谢。这个

我有一个应用程序,它使用ajax调用从active directory中提取域的名称。有些名称具有西班牙语字符(例如n波浪形)。我使用utf-8字符集来获得正确显示表单上数据的字符。我可以成功地从ajax调用中提取名称并将其加载到表单字段中。我遇到的问题是,当表单发布到服务器进行数据库更新时,字符串转换会损坏扩展字符

是否有处理utf-8的特殊字符串函数?获取发布到Oracle表的正确值的正确方法是什么

我已经做了相当多的Java编码,但这是我第一次遇到扩展字符。任何帮助都将不胜感激

谢谢。

这个“演员阵容”在哪里发挥作用

我不确定你的申请是什么,但有几个地方你可能会弄乱字符。首先,假设这是某种JavaEE应用程序,请确保已在servlet中设置了请求编码。请参阅HttpServletRequest的setCharacterEncoding方法。你应该在那里使用“UTF-8”

其次,应该确保表单变量上设置了accept charset=“UTF-8”属性。(注意——根据我的经验,如果页面一开始是UTF-8编码的,但安全性好于抱歉,那么这很少是一个问题)

最后,确保已指定连接到数据库所必需的任何编码选项。我不使用Oracle,所以我不知道,但通常需要指定在创建连接的地方使用“unicode”或“utf-8”之类的东西

我会按顺序尝试,因为第一个可能(很可能)会解决问题。

这个“演员阵容”在哪里发挥作用

我不确定你的申请是什么,但有几个地方你可能会弄乱字符。首先,假设这是某种JavaEE应用程序,请确保已在servlet中设置了请求编码。请参阅HttpServletRequest的setCharacterEncoding方法。你应该在那里使用“UTF-8”

其次,应该确保表单变量上设置了accept charset=“UTF-8”属性。(注意——根据我的经验,如果页面一开始是UTF-8编码的,但安全性好于抱歉,那么这很少是一个问题)

最后,确保已指定连接到数据库所必需的任何编码选项。我不使用Oracle,所以我不知道,但通常需要指定在创建连接的地方使用“unicode”或“utf-8”之类的东西


我会按顺序尝试它们,因为第一种方法本身可能会解决问题。

您需要一个新的解决方案。构造它时,指定要使用“UTF-8”字符集。还要确保在http头中指定要发送UTF-8。

您需要一个。构造它时,指定要使用“UTF-8”字符集。还要确保在http头中指定发送UTF-8。

表单提交后的请求中是否有内容类型头?在包含表单?Java
String
s的响应上,是UTF-16。我不知道你说的“弦乐演员”是什么意思。如果要将UTF-8
字节[]
显式转换为
字符串
,则可以使用.Java字符串是unicode。JVM在内部使用UTF-16,但是说Java字符串是UTF-16并不正确。默认字符集取决于平台。@tchrist JVM使用UTF-16这一事实与问题无关,说它导致“无数”编码错误是不真实的。多年来,我一直在Java中使用多个字符集,我看到很多其他代码也在使用相同的字符集,我从未发现这是一个问题。我反复看到的是,人们不知道默认读卡器使用平台默认字符集,因此在读入字符时会损坏字符。新字符串(字节[])执行相同的操作(使用平台默认值),这与JVM在内部使用的内容无关。@cotton.m:表单提交的请求中是否有内容类型头?在包含表单?Java
String
s的响应上,是UTF-16。我不知道你说的“弦乐演员”是什么意思。如果要将UTF-8
字节[]
显式转换为
字符串
,则可以使用.Java字符串是unicode。JVM在内部使用UTF-16,但是说Java字符串是UTF-16并不正确。默认字符集取决于平台。@tchrist JVM使用UTF-16这一事实与问题无关,说它导致“无数”编码错误是不真实的。多年来,我一直在Java中使用多个字符集,我看到很多其他代码也在使用相同的字符集,我从未发现这是一个问题。我反复看到的是,人们不知道默认读卡器使用平台默认字符集,因此在读入字符时会损坏字符。新字符串(字节[])做同样的事情(使用平台默认值),这与JVM内部使用的内容无关。@cotton.m:谢谢比尔。你能详细说明一下吗?表单由多行字段组成。数据库表中每行一行。在处理表单数据的java类中,我将每个列加载到字符串数组中:即String[]linenums=req.getParameterValues(“linenum”);我认为“字符串”类型的强制转换是导致损坏的原因。您能否提供一些详细信息,说明如何使用不会损坏值的类型替换名称数组?强制转换不会损坏字符串的内容,以及您提供的代码段
string[]linenums=req.getParameterValues(“linenum”)
不包含强制转换,因此不清楚如何回答您的问题。将数组标记为字符串[]是否会导致unicode错误