本文将带您了解关于特殊字符问题:MQ消息PUT错误:java.nio.charset.UnmappableCharacterException的新内容,同时我们还将为您解释javamq消息队列详解的相
本文将带您了解关于特殊字符问题:MQ消息PUT错误:java.nio.charset.UnmappableCharacterException的新内容,同时我们还将为您解释java mq消息队列详解的相关知识,另外,我们还将为您提供关于: Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1、Apache Hive:失败:ParseException line 4:1 character ' 此处不支持、Caused by: java.nio.charset.MalformedInputException: Input length = 1、Caused by: java.nio.charset.MalformedInputException: Input length = 2的实用信息。
本文目录一览:- 特殊字符问题:MQ消息PUT错误:java.nio.charset.UnmappableCharacterException(java mq消息队列详解)
- : Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1
- Apache Hive:失败:ParseException line 4:1 character ' 此处不支持
- Caused by: java.nio.charset.MalformedInputException: Input length = 1
- Caused by: java.nio.charset.MalformedInputException: Input length = 2
特殊字符问题:MQ消息PUT错误:java.nio.charset.UnmappableCharacterException(java mq消息队列详解)
在本地连接到队列管理器(即使用TRANSPORT_MQSERIES_BINDINGS
)时,则代码:-
m.characterSet = MQC.MQCCSI_Q_MGR;
表示“采用在队列管理器属性CCSID中设置的CCSID”。您可以使用以下MQSC命令查看此属性:-
DISPLAY QMGR CCSID
以客户端身份连接时(如您的代码所示),则代码:-
m.characterSet = MQC.MQCCSI_Q_MGR;
表示“从客户端计算机的语言环境中找到CCSID”。
IBM Knowledge Center指出:-
对于客户端应用程序,根据客户端的语言环境而不是队列管理器上的语言环境来填充
MQCCSI_Q_MGR
。
如果更改代码行以将消息CCSID显式设置为1208可以解决此问题,则似乎您的客户端计算机的语言环境未设置为UTF-8。
通过浏览队列中的消息(不进行转换)并查看MQMD.CodedCharSetId
字段中的内容,可以查看客户端设置的内容。
之所以在MQ v7.5而不是MQ v9.0上起作用,是因为在IBM MQ v8.0之前,使用java.nio.charset.Charset.encode(CharBuffer)
的Java编码数据的IBM MQ类导致默认替换为格式错误或不可翻译的数据。由于默认的characterSet
为819(ASCII),因此,您发送的任何无法转换为ASCII的字符都将被默认替换字符透明替换,在大多数情况下,这意味着数据已被替换为?
个字符。
v8.0之后,默认行为更改为将这种情况报告为错误,并且默认情况下不再替换格式错误或不可翻译的数据。
您将字符集设置为UTF-8的解决方案是最好的解决方案,因为这会导致发送要发送的确切数据。
另一个选择是告诉MQ使用先前的行为。
IBM MQ 9.0知识中心页面Developing applications>Developing JMS and Java applications>Using IBM MQ classes for Java>Character string conversions in IBM MQ classes for Java中描述了有关新行为的描述以及如何配置Java的IBM MQ类以使用先前的行为:
从IBM®MQ版本8.0开始,有关以下内容的一些缺省行为 Java MQ的IBM MQ类中的字符串转换具有 改变了。
在IBM MQ版本8.0之前,IBM MQ类中的字符串转换用于 Java是通过调用 java.nio.charset.Charset.decode(ByteBuffer)和 Charset.encode(CharBuffer)方法。
使用这两种方法都会默认替换( 替换)格式错误或不可翻译的数据。
此行为可以掩盖应用程序中的错误,并导致 转换数据中的意外字符,例如?。从IBM MQ 8.0版,为了更早,更有效地检测到此类问题, Java的IBM MQ类使用CharsetEncoders和CharsetDecoders 直接并配置格式错误和不可翻译的处理 数据。
从IBM MQ版本8.0开始,默认行为是报告此类问题 通过抛出适当的MQException。
...
设置系统默认值 -
从IBM MQ版本8.0开始,以下两个Java系统属性是: 可用于配置有关字符串的默认行为 转换。
com.ibm.mq.cfg.jmqi.UnmappableCharacterAction 指定在编码和解码时对不可翻译数据采取的操作。 该值可以是REPORT,REPLACE或IGNORE。
com.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement 设置或获取无法映射字符时要应用的替换字节 编码操作中使用默认的Java替换字符串 在解码操作中。
为了避免Java字符和本机字节之间的混淆 表示形式,您应指定 com.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement作为十进制数字 代表本机字符集中的替换字节。
例如,如果本机字节?的十进制值是本机字节,则为63。 本机字符集是基于ASCII的,例如ISO-8859-1。 如果本机字符集是EBCDIC,则为111。
如果您想模仿以前的行为,则可以设置以下系统属性:
-Dcom.ibm.mq.cfg.jmqi.UnmappableCharacterAction=REPLACE
-Dcom.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement=63
您也可以使用以下方式通过程序进行设置:
System.setProperty("com.ibm.mq.cfg.jmqi.UnmappableCharacterAction","REPLACE");
System.setProperty("com.ibm.mq.cfg.jmqi.UnmappableCharacterReplacement","63");
: Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1
ERROR JobContainer - Exception when job run
com.alibaba.datax.common.exception.DataXException: Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1
at java.nio.charset.Charset.forName(Charset.java:531)
at org.apache.commons.io.Charsets.toCharset(Charsets.java:80)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:93)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.init(HdfsReader.java:50)
at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:673)
at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:303)
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:113)
at com.alibaba.datax.core.Engine.start(Engine.java:92)
at com.alibaba.datax.core.Engine.entry(Engine.java:171)
at com.alibaba.datax.core.Engine.main(Engine.java:204)
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:33) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:95) ~[hdfsreader-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.init(HdfsReader.java:50) ~[hdfsreader-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:673) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:303) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:113) ~[datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.start(Engine.java:92) [datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.entry(Engine.java:171) [datax-core-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.Engine.main(Engine.java:204) [datax-core-0.0.1-SNAPSHOT.jar:na]
Caused by: java.nio.charset.UnsupportedCharsetException: 1
at java.nio.charset.Charset.forName(Charset.java:531) ~[na:1.8.0_191]
at org.apache.commons.io.Charsets.toCharset(Charsets.java:80) ~[commons-io-2.4.jar:2.4]
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:93) ~[hdfsreader-0.0.1-SNAPSHOT.jar:na]
... 7 common frames omitted
2019-09-17 15:54:29.892 [job-0] INFO StandAloneJobContainerCommunicator - Total 0 records, 0 bytes | Speed 0B/s, 0 records/s | Error 0 records, 0 bytes | All Task WaitWriterTime 0.000s | All Task WaitReaderTime 0.000s | Percentage 0.00%
2019-09-17 15:54:29.893 [job-0] ERROR Engine -
经 DataX 智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1
at java.nio.charset.Charset.forName(Charset.java:531)
at org.apache.commons.io.Charsets.toCharset(Charsets.java:80)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:93)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.init(HdfsReader.java:50)
at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:673)
at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:303)
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:113)
at com.alibaba.datax.core.Engine.start(Engine.java:92)
at com.alibaba.datax.core.Engine.entry(Engine.java:171)
at com.alibaba.datax.core.Engine.main(Engine.java:204)
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:33)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:95)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.init(HdfsReader.java:50)
at com.alibaba.datax.core.job.JobContainer.initJobReader(JobContainer.java:673)
at com.alibaba.datax.core.job.JobContainer.init(JobContainer.java:303)
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:113)
at com.alibaba.datax.core.Engine.start(Engine.java:92)
at com.alibaba.datax.core.Engine.entry(Engine.java:171)
at com.alibaba.datax.core.Engine.main(Engine.java:204)
Caused by: java.nio.charset.UnsupportedCharsetException: 1
at java.nio.charset.Charset.forName(Charset.java:531)
at org.apache.commons.io.Charsets.toCharset(Charsets.java:80)
at com.alibaba.datax.plugin.reader.hdfsreader.HdfsReader$Job.validate(HdfsReader.java:93)
... 7 more
Apache Hive:失败:ParseException line 4:1 character ' 此处不支持
尝试删除新行?
CREATE SCHEMA IF NOT EXISTS practica2;
CREATE EXTERNAL TABLE IF NOT EXISTS practica2.station_data (IDPROVINCIA string,SPROVINCIA string,IDESTACION string,SESTACION string,FECHA string,DIA string,TEMPMAX string,HORMINTEMPMAX string,TEMPMIN string,HORMINTEMPMIN string,TEMPMEDIA string,HUMEDADMAX string,HUMEDADMIN string,HUMEDADMEDIA string,VELVIENTO string,DIRVIENTO string,RADIACION string,PRECIPITACION string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ';'
STORED AS TEXTFILE
LOCATION 'hdfs://0.0.0.0:9000/user/hive';
或者您的 sql 文件中可能有全角空间。见this post。如果你想去掉全角空格,手动输入sql文件,避免从其他地方复制/粘贴。
Caused by: java.nio.charset.MalformedInputException: Input length = 1
java.lang.IllegalStateException: Failed to load property source from location ''classpath:/application.yml''
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:476)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:465)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:386)
at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:225)
at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:195)
at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:182)
at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:168)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:325)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:296)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
at com.chinanums.schoolspayment.SchoolspaymentApplication.main(SchoolspaymentApplication.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:254)
at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:58)
at org.yaml.snakeyaml.Yaml.loadAll(Yaml.java:518)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:157)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:135)
at org.springframework.boot.env.YamlPropertySourceLoader$Processor.process(YamlPropertySourceLoader.java:101)
at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:58)
at org.springframework.boot.env.PropertySourcesLoader.load(PropertySourcesLoader.java:128)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.doLoadIntoGroup(ConfigFileApplicationListener.java:490)
at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:473)
... 22 common frames omitted
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:223)
... 31 common frames omitted
第一种可能是你的application.yml文件编码格式有问题,改为UTF-8,如下:
第二种:
可能就是你的application.yml文件是通过把其他类型的文件后缀名直接改为yml生成的,这时就需要你把application.yml中的内容全部复制,然后删除,再新建一个application.yml文件,
将复制的内容拷贝进去再运行项目就不会报错了。
Caused by: java.nio.charset.MalformedInputException: Input length = 2
java.nio.charset.MalformedInputException: Input length = 2
异常表示输入数据的长度不正确,导致字符集解析失败。
MalformedInputException
是 Java NIO(New I/O)中的一个异常类,它通常在字符集编解码时出现问题时抛出。在你的情况下,输入数据的长度为2,可能与所使用的字符集或编码方式不匹配。
要解决这个异常,你可以考虑以下几个方面:
-
确认输入数据的编码方式:检查你的代码中用于读取输入数据的部分,并确认所使用的字符集是否正确。如果你知道输入数据的编码方式,可以使用相应的字符集进行解码。
例如,如果输入数据的编码为 UTF-8,你可以使用以下方式进行解码:
Charset charset = StandardCharsets.UTF_8;
String decodedString = new String(inputBytes, charset);
-
如果不确定输入数据的编码方式,可以尝试使用不同的字符集进行解码,观察是否能够成功解析数据。
-
处理输入数据长度不正确的情况:如果输入数据的长度确实不正确,你可能需要检查数据源或数据传输过程中是否存在问题。确保输入数据的长度和内容与预期一致,以避免解码时出现异常。
另外,还可以尝试使用更为健壮的解码方式,如使用
CharsetDecoder
类进行逐个字符的解码,从而更灵活地处理输入数据的异常情况。
public static void main(String[] args) {
byte[] inputBytes = new byte[] { 1, 2, 3, 4, 5 };
Charset charset = StandardCharsets.UTF_8;
ByteBuffer inputBuffer = ByteBuffer.wrap(inputBytes);
CharBuffer outputBuffer = CharBuffer.allocate(inputBytes.length);
CharsetDecoder decoder = charset.newDecoder();
decoder.onMalformedInput(CodingErrorAction.IGNORE); // 忽略输入长度不正确的情况
decoder.decode(inputBuffer, outputBuffer, true);
decoder.flush(outputBuffer);
outputBuffer.flip();
String decodedString = outputBuffer.toString();
System.out.println("decodedString = " + decodedString);
}
-
考虑数据源的可靠性:如果你的输入数据来自外部源(如网络、文件、数据库等),确保源数据的完整性和正确性。在一些情况下,输入数据的损坏或错误可能导致解码异常。
可以使用校验和或其他方法验证输入数据的完整性,并确保数据的准确性和一致性。
根据具体情况选择适当的字符集和解码方式,确保输入数据的正确解析。
关于特殊字符问题:MQ消息PUT错误:java.nio.charset.UnmappableCharacterException和java mq消息队列详解的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于: Code:[HdfsReader-03], Description:[值错误]. - 不支持的编码格式 : [1] - java.nio.charset.UnsupportedCharsetException: 1、Apache Hive:失败:ParseException line 4:1 character ' 此处不支持、Caused by: java.nio.charset.MalformedInputException: Input length = 1、Caused by: java.nio.charset.MalformedInputException: Input length = 2的相关知识,请在本站寻找。
本文标签: