首页 > 解决方案 > 应用程序生成器问题中的 Oracle APEX 19.2 字符编码

问题描述

我在 ORACLE APEX 应用程序生成器中遇到编码问题。当我使用应用程序构建器并创建例如一个带有波兰本地字符条目的列表时,例如“Otwórz”。当我保存它时,它在列表中显示为“OtwA3rz”。所以我正在考虑编码问题,但是当我在列表中使用“网格编辑”时,我可以轻松使用“Otwórz”并正确保存它。之后,在表单中编辑此条目时出现问题。此外,当我在我的应用程序中使用例如 textarea 创建表单时,使用波兰字符保存值没有问题。应用程序生成器只有一个问题。

来自“About Application Express”模块的一些信息:

• 产品版本 19.2.0.00.18

• 架构兼容性 2019.10.04

• 上次 DDL 时间 02/05/2020 01:09:01 PM

• 主机架构 APEX_PUBLIC_USER

• 应用程序所有者 APEX_190200

• 语言偏好 zh

• 当前时间(服务器上)03/16/2020 02:17:08 PM +01:00

• APEX_LISTENER_VERSION 19.2.0.r1991647

• PLSQL_GATEWAY WebDb

• GATEWAY_IVERSION 3

• SERVER_SOFTWARE Mod-Apex

• GATEWAY_INTERFACE CGI/1.1

• REQUEST_METHOD GET

• QUERY_STRING p=4350:9:956788024708&p_dialog_cs=e6pVbBxXQReCPpEOwNEhrbAjoGPeY7nX6VVuLL8ObTSnXKlihOrJCOR8f1EU9isYxMT5Ooqgb-j9A33Mmx1aKA

• PATH_INFO /f

• HTTP_USER_AGENT Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko) Chrome/72.0.3626.121 Safari/537.36

• HTTP_ACCEPT_ENCODING gzip、放气、br

• HTTP_ACCEPT_LANGUAGE pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7

• REQUEST_CHARSET AL32UTF8

• REQUEST_IANA_CHARSET UTF-8 • Oracle Database 12c 企业版版本 12.2.0.1.0 - 64 位生产

• 核心 12.2.0.1.0 生产

• NLSRTL 版本 12.2.0.1.0 - 生产

• PL/SQL 版本 12.2.0.1.0 - 生产

• 适用于 Linux 的 TNS:版本 12.2.0.1.0 - 生产

• NLS_CHARACTERSET:EE8MSWIN1250

• 爸爸字符集:UTF-8

• JOB_QUEUE_PROCESSES:15

我注意到,当我运行 sql 时select 'ó' from dual,结果正是“A3”。我跑了另一个select * from V$NLS_PARAMETERS;,也许会找到所有这一切的原因。NLS_LANGUAGE 是美国的。如何像我通常配置的数据库会话一样为 POLISH 更改它。当我使用全球化设置创建自己的应用程序时,将 nls_language 设置为波兰语没有问题。但我不知道如何为应用程序生成器更改它

我做了一个额外的实验,我在表值'ł'中运行插入并通过 sql_workshop 和 sql_script 从 v$nls_parameters 中选择 *:以下是结果:(语法参数:值:方法(脚本或 sqlworkshop))

NLS_CALENDAR:GREGORIAN:script
NLS_CALENDAR:GREGORIAN:sqlworkshop
NLS_CHARACTERSET:EE8MSWIN1250:script
NLS_CHARACTERSET:EE8MSWIN1250:sqlworkshop
NLS_COMP:BINARY:script
NLS_COMP:BINARY:sqlworkshop
NLS_CURRENCY:$:script
NLS_CURRENCY:$:sqlworkshop
NLS_DATE_FORMAT:mm/dd/yyyy:script
NLS_DATE_FORMAT:mm/dd/yyyy:sqlworkshop
NLS_DATE_LANGUAGE:AMERICAN:script
NLS_DATE_LANGUAGE:AMERICAN:sqlworkshop
NLS_DUAL_CURRENCY:$:script
NLS_DUAL_CURRENCY:$:sqlworkshop
NLS_ISO_CURRENCY:AMERICA:script
NLS_ISO_CURRENCY:AMERICA:sqlworkshop
NLS_LANGUAGE:AMERICAN:script
NLS_LANGUAGE:AMERICAN:sqlworkshop
NLS_LENGTH_SEMANTICS:BYTE:script
NLS_LENGTH_SEMANTICS:BYTE:sqlworkshop
NLS_NCHAR_CHARACTERSET:AL16UTF16:script
NLS_NCHAR_CHARACTERSET:AL16UTF16:sqlworkshop
NLS_NCHAR_CONV_EXCP:FALSE:script
NLS_NCHAR_CONV_EXCP:FALSE:sqlworkshop
NLS_NUMERIC_CHARACTERS:.,:script
NLS_NUMERIC_CHARACTERS:.,:sqlworkshop
NLS_SORT:BINARY:script
NLS_SORT:BINARY:sqlworkshop
NLS_TERRITORY:AMERICA:script
NLS_TERRITORY:AMERICA:sqlworkshop
NLS_TIMESTAMP_FORMAT:DD-MON-RR HH.MI.SSXFF AM:script
NLS_TIMESTAMP_FORMAT:DD-MON-RR HH.MI.SSXFF AM:sqlworkshop
NLS_TIMESTAMP_TZ_FORMAT:DD-MON-RR HH.MI.SSXFF AM TZR:script
NLS_TIMESTAMP_TZ_FORMAT:DD-MON-RR HH.MI.SSXFF AM TZR:sqlworkshop
NLS_TIME_FORMAT:HH.MI.SSXFF AM:script
NLS_TIME_FORMAT:HH.MI.SSXFF AM:sqlworkshop
NLS_TIME_TZ_FORMAT:HH.MI.SSXFF AM TZR:script
NLS_TIME_TZ_FORMAT:HH.MI.SSXFF AM TZR:sqlworkshop
value:A?:sqlworkshop
value:ł:cript

基本上它们是相同的

接下来我使用与之前插入 userenv 参数的代码相同的方法运行,以下是不同之处:

ACTION::script
ACTION:Processes - point: BEFORE_BOX_BODY:sqlworkshop
CLIENT_IDENTIFIER:::script
CLIENT_IDENTIFIER:#MY_LOGIN#:12101284695326:sqlworkshop
CLIENT_INFO:100001:#MY_LOGIN#:sqlworkshop
CLIENT_INFO:#MY_LOGIN#:script
MODULE:APEX_190200/APEX:APP 4500:1200:sqlworkshop
MODULE:HTML DB:SQL Workshop:Script:test2:script

标签: oraclecharacter-encodingoracle-apex

解决方案


我在 tomcat/ords 上运行 APEX。我正在使用 CAS 进行身份验证,我发现实现 CAS(在 xml 中配置它会产生这些问题)。我不知道为什么,也不知道怎么做,但似乎这个问题已经结束,因为这是 TOMCAT/APEX/ORDS/CAS 组合的问题,所以我将创建新问题。

由 CAS 引起的 APEX 应用程序生成器的编码问题


推荐阅读