HTTP:国际化

HTTP对国际化内容的支持

HTTP报文中可以承载以任意语言表示的内容,就像它能承载图像、影片或者任何类型的媒体那样。对HTTP来说,实体主体只是二进制信息的容器而已。

为了支持国际性的内容,服务器需要告知客户端每个文档的字母表和语言,这样客户端才能正确地把文档中的信息解包为字符并把内容呈现给用户。

服务器通常HTTP协议的Content-Type首部中的charset参数和Content-Language首部告知客户端文档的字母表和语言。这些首部描述了实体主体的“信息盒子”里面装的是什么,如何把内容转换成合适的字符以便显示在屏幕上以及里面的词语表示的哪种语言。

同时,客户端需要告知服务器用户理解何种语言,浏览器上安装了何种字母表编码算法。客户端发送Accept-Charset首部和Accept-Language首部,告知服务器它理解哪些字符集编码算法和语言以及其中的优先顺序

下面HTTP报文表示客户端接收法语以及一点点英语,支持iso-8847-1西欧字符集编码和UTF-8 Unicode字符集编码:

在这里插入图片描述

字符集和HTTP

字符集是吧字符转换为二进制码的编码

HTTP字符集的值说明如何把实体内容的二进制码转换为特定字母表中的字符。每个字符集标记都命名了一种把二进制码转换为字符的算法(反之亦然)。

下面的Content-Type首部告知接受者,传输的内容是一份HTML文件,用charset参数告知接受者使用iso-8859-6阿拉伯字符集的解码算法把内容中的二进制码转换为字符。
在这里插入图片描述在这里插入图片描述

字符集和编码如何工作

现在我们来看看字符集合编码到底做了什么。

我们想把文档中的二进制码转换为字符以便显示在屏幕上。但由于有很多不同的字母表,也有很多不同的方法把字符编码成二进制码,我们需要一种标准方法来描述并应用把二进制码转换为字符的编码算法。

把二进制码转换为字符要经过两个步骤

  • 图a中,文档中的二进制码被转换成字符代码,它表示了特定编码字符集中某个特定编码的字符。这里,转换后的字符代码是255
  • 图b中,字符代码用于从编码的字符集中选择特定的元素。在iso-8859-6中,值255对应阿拉伯字母"FEH"。在步骤a和b中使用的算法取决于MIME的charset标记
    在这里插入图片描述
    国际化字符系统的关键目标是把语义(字母)和表示(图形化的显示形式)隔离开来。HTTP只关心字符数据和相关语言以及字符集标签的传输。字符形状的显示是由用户的图形显示软件(包括浏览器、操作系统、字体等)完成的

标准化的MIME charset值

特定的字符编码方案和特定的已编码字符集组合成一个MIME字符集(MIME charset)。HTTP在Content-Type和Accept-Charset首部中使用标准化的MIME charset标记。MIME charset中的值都会在IANA注册。下面给出了一些常见的MIME charset编码方案:
在这里插入图片描述
如果客户端无法推断出字符编码,就假定使用的是iso-8859-1

Accept-Charset首部

HTTP客户端可以使用Accept-Charset请求首部来明确告知服务器它支持哪些字符系统。Accept-Charset首部的值列出了客户端支持的字符编码方案。比如,下面的HTTP请求首部表明,客户端接收ios-8859-1和UTF-8变长的Unicode兼容系统,服务器可以随便选择这两种字符编码之一来返回内容。
在这里插入图片描述

注意,没有Content-Charset这样的响应首部与Accept-Charset请求首部匹配。为了和MIME标准兼容,响应的字符集是服务器通过Content-Type响应首部的charset参数带回来的.

语言标记和HTTP

Content-Language首部

实体的Content-Language首部字段描述实体的目标受众语言。如果内容主要是给法语受众的,其Content-Language首部字段就将包含:

在这里插入图片描述
如果内容是面向多种语言的,可以列出多种语言:
在这里插入图片描述

Accept-Language首部

可以用Accept-Language标记接收语言:
在这里插入图片描述
可以在Accept-Language首部中放入多个语言标记以枚举所支持的全部语言以及其优先顺序(从左到右):

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
401国际化是指在Spring Boot应用中对HTTP状态码为401(未授权)的错误进行国际化处理。在Spring Boot中,可以通过自定义异常处理器来实现401国际化。 以下是一个示例代码,演示如何在Spring Boot应用中实现401国际化[^2]: 1. 创建一个自定义的异常类,用于表示未授权错误: ```java public class UnauthorizedException extends RuntimeException { // 自定义异常信息 } ``` 2. 创建一个全局异常处理器,用于捕获并处理未授权错误: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(UnauthorizedException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public ResponseEntity<String> handleUnauthorizedException(UnauthorizedException ex) { // 获取当前请求的Locale Locale currentLocale = LocaleContextHolder.getLocale(); // 根据Locale获取对应的错误信息 String errorMessage = getMessage("error.unauthorized", currentLocale); // 返回国际化后的错误信息 return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(errorMessage); } // 根据错误代码和Locale获取对应的错误信息 private String getMessage(String code, Locale locale) { // 使用Spring的MessageSource来获取国际化资源文件中的错误信息 return messageSource.getMessage(code, null, locale); } } ``` 3. 在国际化资源文件中定义错误信息: 在`resources`目录下创建`messages.properties`文件,并添加以下内容: ```properties error.unauthorized=Unauthorized ``` 在`resources`目录下创建`messages******************

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值