为什么我的UTF-8编码数据不能保留?UTF-8?编码?

时间:2013-11-26 21:46:45

标签: java encoding utf-8 sql-server-2008-r2 jsf-1.2

我想解决的问题是: 我们的应用程序的用户是来自Windows等相关文档的复制/粘贴字符,例如Word,我们的应用程序无法识别单引号和双引号或项目符号。

这是我到目前为止将这些数据转换为UTF格式所采取的步骤:

  1. 在servers.xml内,在Connector标签中,我添加了属性URIEncoding =“UTF-8”。

  2. 在负责存储输入的bean中,我创建了一个byte []并传入String并保存inputNote文本,然后将其转换为UTF-8。然后将UTF-8转换后的String传递回inputNoteText String。请直接在下面查看有关此内容的简明代码。

    byte[] bytesInUTF8inputNoteText = inputNoteText.getBytes("UTF-8");
    
    inputNoteText = new String(bytesInUTF8inputNoteText, "UTF-8");
    this.var = inputNoteText;
    
  3. 在变量设置器中负责保存db查询的结果: setNoteText(noteText)将来自数据库查询的注释数据转换为UTF8格式的字节,然后将其转换回String并将其设置为String noteText属性。还在下面。

    public void setNoteText(String noteText) throws UnsupportedEncodingException {  
            byte[] bytesInUTF8inputNoteText = noteText.getBytes("UTF-8");
            String noteTextUTF8 = new String(bytesInUTF8inputNoteText, "UTF-8");                    
            this.noteText = noteTextUTF8;}
    
  4. 在SQL Server中,我将数据类型从text更改为nvarchar(MAX),以便以Unicode格式存储数据,即使这是一种不同类型的Unicode。

  5. 当我从MS Word文档复制/粘贴到我们的JSF输入文本框中时看到的内容:

    在Eclipse中,如果我在bean中的属性上设置监视,一旦该String属性中的数据转换为UTF-8,所有字符都是UTF-8格式。当我发布到SQL Server时,以nvarchar(max)数据类型保存的数据字符串正确显示UTF-8格式的所有字符。然后当返回resultSet并使用从db查询返回的String填充hold属性时,它还显示所有格式正确的UTF-8格式....但是,......介于正确的字符串值之间的某个位置坐在绑定到JSF页面和JSF页面的属性中,1.2顺便说一下,该值未被格式化,因此我看到问号,我应该看到单/双引号和项目符号。我希望有人之前遇到过这类问题,并且可以解释我需要做些什么来解决这个问题。看起来有点像JSF错误,提前感谢您的输入!!

2 个答案:

答案 0 :(得分:0)

试试这个

String noteText = new String (noteText.getBytes ("iso-8859-1"), "UTF-8");

答案 1 :(得分:0)

从Windows文档复制粘贴时,编码格式不是UTF-8,而是[Windows-1252](http://en.wikipedia.org/wiki/Windows-1252)。请注意以粗绿色边框标记的单元格。这些字符DONT映射到UTF-8字符集,因此您必须在阅读时使用Windows-1252编码。