有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的UTF8编码数据不保留?UTF8?编码的?

我试图解决的问题是: 我们应用程序的用户正在复制/粘贴windows相关文档(例如Word)中的字符,我们的应用程序无法识别单引号、双引号或项目符号

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

  1. 在服务器内部。xml,在连接器标记中,我添加了属性URIEncoding=“UTF-8”

  2. 在负责存储输入的bean中,我创建了一个字节[],并传入了包含inputNote文本的字符串,然后将其转换为UTF-8。然后将UTF-8转换的字符串传递回inputNoteText字符串。请直接参阅下面的压缩代码

    byte[] bytesInUTF8inputNoteText = inputNoteText.getBytes("UTF-8");
    
    inputNoteText = new String(bytesInUTF8inputNoteText, "UTF-8");
    this.var = inputNoteText;
    
  3. 在负责保存db查询结果的变量设置器中: setNoteText(noteText)将来自数据库查询的注释数据转换为UTF8格式的字节,然后将其转换回字符串,并将其设置为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. 在SQLServer中,我将数据类型从text更改为nvarchar(MAX),以Unicode格式存储数据,尽管这是一种不同的Unicode类型

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

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


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    试试这个

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