请考虑以下代码:

public class ReadingTest {

public void readAndPrint(String usingEncoding) throws Exception {

ByteArrayInputStream bais = new ByteArrayInputStream(new byte[]{(byte) 0xC2, (byte) 0xB5}); // 'micro' sign UTF-8 representation

InputStreamReader isr = new InputStreamReader(bais, usingEncoding);

char[] cbuf = new char[2];

isr.read(cbuf);

System.out.println(cbuf[0]+" "+(int) cbuf[0]);

}

public static void main(String[] argv) throws Exception {

ReadingTest w = new ReadingTest();

w.readAndPrint("UTF-8");

w.readAndPrint("US-ASCII");

}

}

观察到的输出:

µ 181

? 65533

为什么readAndPrint()(使用US-ASCII的那个)的第二次调用成功?我希望它会抛出一个错误,因为输入不是这个编码中的正确字符. Java API或JLS中强制执行此行为的位置是什么?

解决方法:

在输入流中查找不可解码字节时的默认操作是将其替换为Unicode字符U+FFFD REPLACEMENT CHARACTER.

CharsetDecoder decoder = Charset.forName(usingEncoding).newDecoder();

decoder.onMalformedInput(CodingErrorAction.REPORT);

InputStreamReader isr = new InputStreamReader(bais, decoder);

标签:ascii,java,encoding,utf-8,non-ascii-characters

来源: https://codeday.me/bug/20190715/1471789.html

java us ascii_java – 为什么US-ASCII编码接受非US-ASCII字符?相关推荐

  1. python字符编码使用ascii编码储存对么_Python字符编码详解(转)

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  2. java ascii 编码方式_JAVA 的ASCII字符编码一览表

    JAVA 的ASCII字符编码一览表 二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义 0000 0000 0 00 NUL ␀ 空字符(Null) 0000 0001 1 01 SOH ...

  3. java ascii 编码方式,Java 字符编码 ASCII、Unicode和UTF-8

    1 ASCII码 统一规定英语字符与二进制位之间的关系.ASCII码一共规定了128个字符的编码.例如,空格"SPACE"是32(二进制00100000),大写字母A是65(二进制 ...

  4. ebcdic编码与ascII编码互转

    1:ebcdic编码转ascII编码...... char e2a[256] =       {         0,  1,  2,  3,(char)156,  9,(char)134,127,( ...

  5. java编译报错提示编码gbk的不可映射字符啥意思_解决java编译错误:编码GBK的不可映射字符...

    [我的Android进阶之旅]解决Android Studio 运行gradle命令时报错: 错误: 编码GBK的不可映射字符 1.问题描述 最近在负责公司基础业务和移动基础设施的开发工作,正在负责L ...

  6. Python 入门 26 —— ASCII 编码、Unicode 编码、 UTF-32、 UTF-16、 UTF-8、 GB2312 编码、 GBK 编码

    计算机存储和处理信息都是以一个8位的二进制字节为单位的,例如:0b 1111 0000.一个字母.汉字等如何用一个二进制的数(编码)来表示呢.在计算机发展初期,因为没有人能预料到计算机会有现在这么大的 ...

  7. php获取ascii的值,php chr() ord() 获取ASCII编码 中文截取

    ASCII编码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点.字母.数字.汉字等.在编程过程中,经常把指定的字符转化为ASCII码进行比较. 下面是PHP提供的转换ASCII码和字 ...

  8. python初级6(九九乘法表,二进制,ASCII编码,GBK,unicode,utf-8)

    九九乘法表 for i in range(1,10):for j in range(1,i+1):print(f"{i}*{j} == {i*j}",end=" &quo ...

  9. Ansi,UTF8,Unicode,ASCII编码的区别

    近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了, 下面全是从网上搜来的: 1.  ASCII和Ansi编码     字符内码(charcter code)指的是用来代表字符 ...

  10. 【字符编码详解】ASCII、GB2312、GBK、UTF-8、UTF-16编码与Unicode字符集

    目录 前言 一.什么是编码,数据类型和编码有什么关系? 二.英文字符编码 ASCII编码 三.中文编码 1. GB2312标准 2. GBK编码 3. 其他中文编码 四.Unicode字符集 1. U ...

最新文章

  1. 天津:第十六届西青区民俗文化旅游节开幕
  2. 光流 | 基于光流法检测跟踪视频中的汽车
  3. JLBH示例3 –吞吐量对延迟的影响
  4. 前端学习(1955)vue之电商管理系统电商系统之完成添加分类功能
  5. linux pid t 头文件_linux系统调用相关头文件
  6. 我的年终奖是大饼+鸡汤,and you?
  7. 玩具谜题(洛谷-P1563)
  8. 虚拟机的管理(libvirtd)、移植和快照
  9. vue.js快速入门 1
  10. 计算机不能引导硬盘,联想电脑win10改win7后不能引导bios中找不到硬盘的解决教程...
  11. 第一次写前后端分离项目的经验总结
  12. php codeigniter,PHP项目中CodeIgniter使用的一些建议
  13. Cisco Live 2016:CEO罗卓克谈英国脱欧、内部孵化以及向服务转型
  14. java 图片拼接_Java实现图片拼接
  15. Best Buy百思买验厂反恐标准手册/反恐程序要求
  16. 软件测试自学网站推荐_四大适合年轻人自学的网站!知乎超100万人推荐,自学改变人生...
  17. Tensorflow 2.0 学习(chapter 6)
  18. 第五章第二十八题(显示每月第一天是星期几)(Display the first days of each month)
  19. Canonical Address
  20. 三个步骤教你如何通过天猫精灵控制智汀,实现不同生态设备相互联动

热门文章

  1. windows java opencv怎么玩
  2. Linux编译后运行,OpenCV2.3.0编译后运行的问题
  3. 二维随机变量期望公式_多维随机变量的特征数
  4. loss 加权_Multi-Similarity Loss使用通用对加权进行深度度量学习-CVPR2019
  5. 【Hoxton.SR1版本】Spring Cloud Eureka服务注册中心集群搭建
  6. 线程的创建方式及Runnable与Callable的区别
  7. Spring之AOP的实现
  8. Prometheus 和 Alertmanager实战配置
  9. ubuntu安装 opencv-3.4.3
  10. 配置IIS5.5/6.0 支持 Silverlight