JAVA基础:Java多语言编码问题解析

Java国际化支持:ResourceBundle深入解析与多语言实现 本文全面介绍Java国际化(i18n)实现方法,重点解析ResourceBundle机制。内容涵盖:国际化基础概念(i18n与l10n区别)、ResourceBundle工作原理与资源查找顺序、多语言支持实现代码示例(包含中英法语资源文件)、动态语言切换等高级特性。文章还比较了属性文件与ListResourceBundle类的性能差异,为开发者提供Java国际化完整解决方案,帮助构建多语言支持的应用程序。 阅读详情
1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。

  例如:我们的源文件是以UTF-8的方式保存的,而在编译时编译器却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Unicode的编码转换方法来对源文件进行转换。

  a.对于控制台程序,编译器会把源文件看作是由系统默认的编码类型来编码的(系统默认的编码类型取决于在控制面板区域设置里的配置,中文win2k下通常是GBK),也可以使用-encoding参数来设置,如:javac -encoding UTF-8,这样编译器就会把源文件看作是用UTF-8编码的(这只是告诉编译器源文件的编码类型,而不是对源文件转码)。在各种语言的平台上只要在编译用时-encoding指定与源文件的编码相同的编码方式,就不会存在国际化的问题了。

  b.对于JSP,编译器则会根据设定的字符集来判断JSP文件使用的是什么编码方式,进而将其转换成unicode后进行编译; 若JSP中未指定,编译器则会把JSP文件看作是按照系统默认的编码来保存的。在JSP2.0里新增了一个指令来通知编译器这个源文件所使用的编码方式。

  2、在处理输入输出时,注意设置输入流和输出流的编码类型与用户输入时和输出设备显示时采用的编码方式一致。

  由于JRE在处理输入输出时会将输入或输出的内容进行编码转换,对于输入会转换为unicode后再送入,因此要正确的匹配实际输入内容的编码方式和告知JRE的编码方式,对于输出,会由unicode转换为其他的编码再送出程序,因此要正确匹配输出设备显示时用的编码方式和告知JRE的编码方式。

  例如:程序中设置输入流的编码是new InputStreamReader(System.in,"GB2312"); 而程序运行后用户输入时用了繁体中文的输入法,输入了BIG5编码的内容,这样JRE把BIG5编码的内容当作GB2312的进行了GB2312->unicode的编码转换,这样转换后的结果显然不是用户想要输入的内容了。

  默认情况下,JRE会把输入输出的内容当作是按照系统默认编码方式编码的。

  3、在Servlet中,除了一定要把源文件用的是什么编码方式正确无误的”告诉”编译器外,还要注意实际提交的URL数据、表单数据的编码格式和request中声明的编码格式一致。

  客户端浏览器在通过表单和URL提交数据时,容器和JVM会将request中的数据看作是按照request所声明的编码方式来编码的,将数据由这种编码方式转换为unicode后再送入servlet(实际上容器会先将request中的数据转为一种中间编码方式,具体根据容器的配置而定,再由JVM由这种中间方式转换为unicode,通常这种中间格式是ISO)。servlet输出的unicode数据会由容器根据response中声明的编码方式进行转换,再送到客户端浏览器上。

  在接收客户端输入时,用request.setCharacterEncoding()声明请求中数据的编码方式。

  在向客户端输出时用response.setContentType("text/html; charset="); 声明响应的数据的编码方式,告知浏览器以哪种编码方式显示。

  4、在JSP中,由于JSP本就会被JSP编译器编译为servlet来运行,因此情况与servlet相同。

  这两个JSP指令声明了请求和响应的编码方式。

  只要确保URL参数或表单中数据的编码方式和所声明的编码方式一致,再通过告知JSP编译器本JSP文件采用的编码方式及含有哪种字符,即可解决JSP的字符编码问题。

  这里是一个具体的例子:

  现在因为浏览器对UTF-8的支持,我们可以通过在源文件、请求、响应中都使用unicode编码方式,来轻松达到处理国际化和字符编码问题的目标。

  以我们使用的tomcat4.1.2为例,过程如下:

  1、编写JSP页面时:在每个JSP页面在页首都要增加一行:

  在编辑JSP页面时,一定要确保JSP文件以unicode的方式保存,目前几乎所有的编辑器都有以unicode编码保存或将文件内容转换成unicode的功能。

  2、增加一个用来声明request的CharacterEncoding的类SetCharacterEncodingFilter.java;

  SetCharacterEncodingFilter的这个类主要的作用就是:把request在从页面刚提交到server端的时候的encoding声明为我们想要的encoding,通过调用request的方法setCharacterEncoding (String encoding) 来改变,这样可以使request的从客户端传过来的时候,按我们在web.xml (在第二点可以讲到) 中配置的encoding来对提交的数据编码。

  3、修改web.xml文件,配置一个filter来过滤全部url请求,通过第二步中的类,声明所有url请求的编码类型未UTF-8。

  在web.xml文件中加上以下这段:

   Set Character Encoding
org.kyle.web.sample.SetCharacterEncodingFilter

encoding
UTF-8


Set Character Encoding
/*


  在上面这段文字中“org.kyle.web.sample.SetCharacterEncodingFilter”指定步骤2中的类的位置,“ UTF-8”指定我们希望声明的request的编码类型,“/*”指定这个filter的适用范围(这里指的是全部url请求)。
 
Java多语言用户界面开发的终极指南:从基础到工业级实战 Java多语言应用开发实战指南 本文通过1000+行代码演示Java国际化开发核心方案: 基础架构 使用Locale和ResourceBundle实现多语言资源加载 规范资源文件命名(如Messages_zh_CN.properties) 支持UTF-8编码解决非拉丁字符显示问题 Swing实践 动态刷新UI组件文本 支持阿拉伯语等RTL语言布局 实现运行时语言热切换 JavaFX进阶 FXML与资源文件绑定 通过FXMLLoader动态加载语言包 完整的多语言界面重构方案 涵盖从基础原理到企业级实现的完整 阅读详情

相关推荐

从ASCII到UNICODE:Java实现字符编码转换器

本文还有配套的精品资源,点击获取 简介:本文介绍了Java项目"armscii2unicode-converter",该项目专注于解决字符编码转换问题,特别是将亚美尼亚语的ASCII扩展编码ArmSCII转换为包含全球语言的UNICODE字符集。文章详细描述了ASCII和UNICODE的基本概念,以及ArmSCII的背景和目的。项目通过读取、字符映射、转换过程和输出结果,实...

weixin_33240461的博客 1860

serlvert jsp mysql_JAVA基础:Java多语言编码问题解析(2)

这里是一个具体的例子:现在因为浏览器对UTF-8的支持,我们可以通过在源文件、请求、响应中都使用unicode编码方式,来轻松达到处理国际化和字符编码问题的目标。以我们使用的tomcat4.1.2为例,过程如下:1、编写JSP页面时:在每个JSP页面在页首都要增加一行:在编辑JSP页面时,一定要确保JSP文件以unicode的方式保存,目前几乎所有的编辑器都有以unicode编码保存或将文件内容转...

weixin_33364627的博客 135

【Latex】【附安装文件】Miktex和TexStudio的安装与配置

这代表“构建并运行”,一般来说,我们只需要点这个按钮来运行Latex代码。保存一下代码文件,再运行一次,PDF文件会出现在与代码文件相同的文件夹下。安装完成后,你可能会跳转到一个页面中,你看到这个页面就意味着安装成功了。其实不需要你敲,你只要将下面的代码复制粘贴到你刚刚的文件中即可。成功安装MikTex后,我们需要进行更新,减少后续使用的麻烦。如果懂得将安装路径设置在你想要的盘中,你可以自己设置。双击上文的.exe文件后,你会看到如下画面。如果不懂,为避免不必要的麻烦,请直接点击“

未来就在脚下。 1万+

Java字符编码问题全面解析与解决方案

本文深入探讨了字符编码的理论与实践,重点分析了文件操作和网络传输中的编码问题。首先介绍了字符编码的核心概念和常见标准,详细解析了Unicode与UTF-8的特点。在Java字符表示部分,说明了UTF-16编码和代理对机制。针对文件操作,文章指出了常见的编码错误,并提供了正确的文件读写方式及编码转换技术。在网络传输方面,阐述了HTTP协议中的编码处理要点,包括响应编码设置和请求参数编码。全文通过具体代码示例,为正确处理字符编码问题提供了实用指导。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 2038

5G NR协议栈及功能1 - 总体架构与物理层

  备注:本文所有图片均来自3GPP标准,包括3GPP TS 38.300 V15.0.0 (2017-12)和3GPP TS 38.202 V15.0.0 (2017-12)等。本文主要介绍截止目前(2018年1月25日),3GPP 5G NR相关的协议内容,后期可能会有更新。   本系列共分为两部分:   1. 5G NR协议栈及功能1 - 总体架构与物理层 http://blog...

Wei Xingguang 11万+

【专栏目录】

🌟 深度学习工程师的终极武器库!本专栏深度解析近3年CV领域最前沿的YoloV8改进方案,每一种方法都经过实战验证,性能显著提升!🌟。

m0_47867638的博客 1万+

Java多语言编码问题解析

Java 编码 :字符串变成字节数组 ,String --> byte[] ,str.getBytes(charsetName); Java 解码 :字节数组变成字符串 , byte[]--> String ,new String(byte[],charsetName); I/O 操作中存在的编码 我们知道涉及到编码的地方一般都在字符到字节或者字节到字符的转换上,而需要这种转换的

Alex_zhuang的专栏 744

【NVIDIA GR00T N1 从入门到精通】第1章 环境搭建与基础配置 第2章 数据准备与格式转换

针对新型机器人形态的适配,需完成从硬件接口到数据模式的完整配置流程。创建modality_config.py文件自定义形态配置通过继承基类实现。配置类需实例化以下组件:状态模态定义(观测空间)、动作模态定义(动作空间)、相机模态定义(视觉输入)、可选的标注模态定义(语言指令或成功判定)。每个模态配置指定数据类型、形状、归一化统计量以及时序采样策略。状态模态配置状态配置的核心参数包括与。定义策略观测的历史时域窗口,对于高动态操作(如投掷、击打),需扩展历史窗口以捕捉运动趋势;

VectorShift的博客 96

Java多语言编码问题解析(1)

1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。 例如:我们的源文件是以UTF-8的方式保存的,而在编译时编译器却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Unico

enoeht的专栏 1153

PCL 读取和保存点云

PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

纵马踏花向自由 1740

Intellij IDEA 使用教程(一)Jdk安装和配置

一.JDK下载 这里下载的是Java SE 8u181 64位版本。可以根据自己电脑配置来选择不同版本。 官网下载JDK 二.安装JDK 双击运行jdk-8u181-windows-x64.exe安装程序 选择安装目录,然后点击下一步 等待安装 安装JRE,就是java的运行环境,可以安装在java目录下 等待安装 安装完成。点击关闭。 三.java环境变量配置 关于环境变量的配置,...

岁月不饶人,我亦未曾饶过岁月 4060

java设置语言编码_Java多语言编码问题解析

1、Java编译器在对源文件编译前,会先把源文件转换为unicode编码,因为这个原因,我们在编译时一定要把源文件用的是什么编码方式正确无误的”告诉”编译器。例如:我们的源文件是以UTF-8的方式保存的,而在编译时却把它当作是用GBK方式保存的,这样编译器就会按照GBK->Unicode的编码转换方法对源文件进行转换,然后再编译,这样当然会出错,实际上编译器应当按照UTF-8->Uni...

weixin_30456719的博客 479

【BlueDroid】蓝牙音乐协议分析之A2DP和AVRCP连接流程(超详细)

AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,他是一个总体的协议,具体的控制信息由其指定的协议(AVRCP)实现,AVCTP协议本身只指定控制Command和Response的总体的格式;这个过程中对应了Event中的btavrcp_play_status_changed_callback和btavrcp_play_position_changed_callback;上述为AVCTP-Control建立L2CAP连接的Command,对应H4的Sent (0x00);

风云说通信 7317

Web容器的编码问题

一、      概述基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GBK 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。本文将从编码基本知识,Java对字

MindHawk 3980

【银河麒麟桌面系统】自定义ISO镜像操作实践

本文详细介绍了麒麟操作系统Kylin-Desktop-V10-SP1的ISO镜像定制流程。通过挂载原始镜像、解压文件系统、进入chroot环境进行系统定制(包括文件替换和软件管理),最终重构squashfs并生成新ISO。关键步骤包括:挂载镜像到mnt目录、解压filesystem.squashfs、替换源配置文件、在chroot环境中清理系统、重新生成squashfs文件以及使用mkisofs命令创建新镜像。文章特别标注了x86和ARM架构的不同命令参数,并提供了安装测试验证方法。整个过程展示了从原始镜像

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2342

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Vosk API多语言字符编码终极实战:从乱码到完美输出的完整指南

"明明语音识别准确率很高,为什么输出结果全是乱码?"这是许多开发者在使用Vosk API处理中文、日文等多语言语音识别时的共同困惑。作为一名经历过无数次编码折磨的技术专家,今天我将带你彻底解决这个看似简单实则复杂的字符编码问题。 ## 真实案例:当语音识别遇上多语言乱码 还记得那个让我熬夜两天的项目吗?客户需要在国际会议系统中集成离线语音识别功能,支持中英日韩四种语言。我们选择了Vosk AP

gitblog_00681的博客 911

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JavaParser国际化支持终极指南:处理多语言编码和Java版本特性的完整教程

JavaParser作为一款强大的Java 1-25语法解析器和抽象语法树工具,提供了全面的国际化支持功能。无论您需要处理中文注释、日文字符串还是其他多语言编码的Java源代码,JavaParser都能完美胜任。本文将为您详细介绍JavaParser的国际化功能,包括字符编码处理、Unicode支持、多语言特性配置等核心内容。 ## 🌍 为什么需要国际化支持? 在现代软件开发中,国际化(i1

gitblog_00878的博客 769

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

修复多语言代码缺陷的 4 个坑:编码 + 语法差异,避坑指南在此

同时,结合实际开发案例与工具应用,提供针对性的识别方法、修复步骤与预防策略,帮助开发者系统规避风险,提升多语言代码开发效率与质量,为多语言项目的稳定推进提供实用指南。函数调用是代码逻辑的核心,但不同语言的函数调用规则差异,常导致参数传递异常:例如,Python 支持默认参数和可变参数(*args、**kwargs),若将带有默认参数的 Python 函数,按 Java 的 “参数个数必须匹配” 规则调用,会导致参数缺失错误;// 通过 IKVM 处理 ref 参数,age 会被修改为 21​。

2503_92848840的博客 798

多语言字符串编码问题解析与最佳实践

字符编码是计算机处理文本的基础技术,其核心在于二进制与人类文字的映射关系。从ASCII到Unicode的演进,解决了多语言环境下的兼容性问题,其中UTF-8因其通用性成为现代系统的标准选择。正确理解编码原理能有效避免乱码、存储异常等典型问题,特别是在全球化应用开发中。通过统一使用UTF-8编码、规范输入输出处理、以及采用多字节安全函数等技术手段,可以显著提升系统的国际兼容性。本文结合电商系统等实际案例,深入探讨了从编码自动检测到数据库存储优化的全链路解决方案,为开发者提供了一套经过验证的字符串处理工程实践。

weixin_42570296的博客 296

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 303
上一篇: JAVA反编译工具
下一篇: 安装Ubuntu3D特效
SunnyJavaMoon
博客等级 码龄21年 20粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值