Tapestry:字符编码问题

2023-12-09

我有一个 Tapestry 应用程序,它从表单中检索数据,将其写入数据库,然后显示结果。只要不使用特殊字符(ä、Ö、Ü、ß、€ ...),一切都可以正常工作。

例如。文本

TestäöüßÄÖÜ€$ 

将导致

TestäöüÃÃÃÃâ¬$

我猜这个问题与错误的字符编码设置有关。

Tapestry java 类:

@Component(parameters = {"clientValidation=false"})
private Form form;

@Component(parameters = {"value=someDTO.name"})
private TextField someNameField;

挂毯模板:

<t:form t:id="form">
    ...
    <t:textfield t:id="someNameField"/>
    ...
</t:form>

我在几个地方检查了我的编码设置:

  1. HTML 源:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  1. Tapestry 设置(无论如何这应该是默认设置):

    tapestry.charset=UTF-8
    
  2. Firefox 显示(工具>页面信息:编码):UTF-8。

  3. 底层数据库(Oracle)也使用UTF-8:

    character_set_system    utf8
    

然后我检查了 POST 请求的标头,有两件事引起了我的注意:

  1. 标头中未指定内容类型。我期望这样的事情:

    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    
  2. 空格用 + 编码,而不是 %20。

我还尝试了以下方法:

@Component(parameters = {"clientValidation=false", "enctype='application/x-www-form-urlencoded; charset=UTF-8'"})
private Form form;

and

@Component(parameters = {"clientValidation=false", "enctype='application/x-www-form-urlencoded; charset=UTF-8'", "accept-charset='utf-8'"})
private Form form;

但两者都没有成功(我正在寻找通用解决方案而不是解决方法)。

有趣的是这个提案适用于一些特殊字符(如 ä、ö、ü、ß 等),但我不想使用 ISO-8859-1。如何将 Tapestry 用于表单的编码设置为 UTF-8?我错过了什么或者我的问题是否有完全不同的原因?

EDIT:我在没有数据库的情况下进行了测试,问题仍然存在,所以这与数据库端的错误编码设置无关。


这确实是我的服务器配置错误。我的 web.xml 中的以下添加解决了这个问题(当然这也应该适用于非 Spring 过滤器)。

<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tapestry:字符编码问题 的相关文章

随机推荐

  • NSOutputStream 刷新

    我正在开发 iPhone 应用程序并想使用 CFStreamCreatePairWithSocketToHost NULL url port serverReadStream serverWriteStream 然后使用 serverWri
  • MySQLNonTransientConnectionException:无法创建与数据库服务器的连接

    我正在处理使用 JDBC 连接到 Amazon RDS 上的 MySQL 数据库的一个奇怪问题 我有两部不同的 Android 手机在同一网络上运行相同的代码 一个连接没有任何问题 另一个给了我以下例外 com mysql jdbc exc
  • C# / Java | AES256加密/解密

    我想加密通过 Java C 套接字 Java 服务器 C 客户端 发送的所有数据 我想使用 AES256 但我无法让 Java 和 C 生成相同的加密代码 任何人都可以给我两个示例 1 个 Java 示例和 1 个 C 示例 它们会生成相同
  • 如何使用 PHP 使用 google API 获取用户“contactid”

    我正在尝试使用 google API 3 0 获取用户联系人以及所有用户详细信息 我能够获得包含用户详细信息的 JSON 响应 url https www google com m8 feeds contacts default full
  • 使用 JavaScript 从数组中删除对象

    如何从数组中删除对象 我希望删除包含名称的对象Kristian from someArray 例如 someArray name Kristian lines 2 5 10 name John lines 1 19 26 96 我想实现 s
  • 切换内部片段

    我用 NavigationView 创建了一个 Activity 用切换按钮打开 public class MainActivity extends AppCompatActivity implements NavigationView O
  • ImportError: libcublas.so.9.0: 无法打开共享对象文件: 在 Ubuntu 16.04.03 上安装张量流时没有这样的文件或目录

    我正在尝试安装带有 cuda 和 gpu 支持的tensorflow 当我尝试导入它时 出现以下错误 Traceback most recent call last File
  • 更改默认短信应用意图在 Android 10 上不起作用

    您好 我正在努力将我的应用程序兼容性更新为 android 10 和 11 之前我将我的应用程序设置为默认短信应用程序并从我的应用程序接收和发送新短信 更改默认短信应用程序的意图在 android 10 以下工作正常 但它不是显示更改 An
  • java中的最小值不起作用

    我需要帮助 因为我的脑细胞无法发现这个程序出了什么问题 这是代码 import java util public class student public static void main String args Scanner sc ne
  • 正则表达式对非捕获组的帮助

    肯定是重复的 但我找不到它 我正在使用一个组来匹配重复的子字符串 然而 我不希望这群人被抓获 这似乎是一个矛盾 明确地说 假设我想找到跟随全大写子集字符串的 3 个精确副本的任何字符 为了 s hjgABABABfgfBBdqCCCugDD
  • 递归清空多个文件的命令

    我想递归地清除给定目录的许多日志文件的内容 而不删除每个文件 用一个简单的命令就可以实现吗 我知道我能做到 gt logs logfile log一份一份的 但是该文件夹中有很多日志 这并不简单 顺便说一句 我正在使用 macOS Sier
  • super() 在构造函数中意味着什么? [复制]

    这个问题在这里已经有答案了 代码是做什么的 super 在构造函数内部做什么 例如 这是我的类的构造函数 public abstract class Rectangle extends AbstractShape private doubl
  • 在Python中查找函数的参数

    我希望能够询问班级的 init 方法的参数是什么 简单的方法如下 cls init func code co varnames code co argcount 但是 如果类有任何装饰器 那么这将不起作用 它将给出装饰器返回的函数的参数列表
  • 检查 xslt 中的条件

    下面是输入 XML 小大 对于较大的输入 XML 以及输出 xml 表示抱歉
  • 访问 Ansible playbook 中的清单主机变量

    在 Ansible 2 1 中 我有一个角色被需要访问主机文件变量的剧本调用 关于如何访问它有什么想法吗 我正在尝试访问ansible ssh host in the test1以下清单的部分host file test1 test 1 a
  • 全栈 NestJS 应用程序中的 OAuth2 流程

    另一个 OAuth2 问题在其他地方没有完全涵盖 我使用 NestJS 后端 React 前端 Passport 和我自己的数据库进行身份验证 尝试添加一个 OAuth2 身份提供商 Google 我将 NestJS 应用程序配置为 OAu
  • Grails:更改 hibernate 方言时 SQL 语法错误

    我正在将 Grails 与 mySQL 数据库一起使用 并且尝试更改数据库引擎 据我研究 这可以最好地做到 dialect org hibernate dialect MyDialect 在 DataSource groovy 配置中 但是
  • 在 Regex/Javascript 中将一个字符交换为另一个字符

    我想做类似的事情 var a This is an A B pattern ABABA a replace A B a replace B A 并让它返回 gt 这是 B A 模式 BABAB 代替 gt 这是一个 A A 模式 AAAAA
  • ElasticSearch:我们可以在索引期间同时应用 n-gram 和语言分析器吗

    非常感谢 Random 我已将映射修改如下 为了进行测试 我使用 电影 作为索引类型 注意 我还添加了 search analyzer 如果没有这个 我就无法得到正确的结果 但是我对使用 search analyzer 有以下疑问 1 我们
  • Tapestry:字符编码问题

    我有一个 Tapestry 应用程序 它从表单中检索数据 将其写入数据库 然后显示结果 只要不使用特殊字符 一切都可以正常工作 例如 文本 Test 将导致 Test 我猜这个问题与错误的字符编码设置有关 Tapestry java 类 C