我正在尝试从TextArea获取最多500个字符的值。但是我遇到了带有变音符号的字符的问题,其中每个特殊字符被4个字符替换。因此,如果我提供包含法语字符的500个字符的文本,则在数据库中持久存在的实际长度(字段长度为500)超过500个字符且事务失败。
一些例子:
如果我做错了或者如何获取用户在Java代码中输入的实际文本,有人可以纠正我吗? 我正在使用以下代码片段:
表单定义:
<form id="contForm" method="post" name="formCont"
action="/wps/customforms/ParticipationRequest"
enctype="multipart/form-data">
TextArea定义:
<div class="spec textarea small" id="inpSpec">
<label class="label" for="inp"><%=content.getLangMap().get(langcode)%>
<span class="required">*</span> <span class="hint"></span> </label>
<div class="value">
<div class="control">
<textarea cols="5" rows="3"
id="<%=String.valueOf(content.getId())%>"
name="<%=String.valueOf(content.getId())%>"></textarea>
</div>
</div>
</div>
Servlet片段:
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
String description = null;
for (FileItem item : items) {
if (item.isFormField()) {
if (item.getFieldName().equalsIgnoreCase(String.valueOf(content.getId()))) {
// Here I get invalid data for french characters.
description = item.getString());
}
}
}
其他信息:
答案 0 :(得分:0)
utf-8中127以上的所有字符都以两个或更多字节进行转义。您似乎在数据写入程序和数据写入程序之间存在编码不匹配:
é
的文字是典型的一些法语口音字符,保存为utf-8编码,但后来读作latin-1(又名iso-8859-1):é
(hex {{ 1}})在latin-1中保存在utf-8中变为E9
(= C3 A9
如果显示为&#34;原始&#34;字符)é
依次保存为utf-8,则é
显示为C3 83 C2 A9
显示为原始字符或拉丁编码我不知道您的应用程序服务器,但查看文本可写为utf-8的位置,但读作纯ISO-8859 /拉丁文本。