Internet Engineering Task Force (IETF) P. Saint-Andre Request for Comments: 8264 Jabber.org Obsoletes: 7564 M. Blanchet Category: Standards Track Viagenie ISSN: 2070-1721 October 2017

互联网工程任务组(IETF)P.Saint Andre征求意见:8264 Jabber.org淘汰:7564 M.Blanchet类别:标准轨道Viagenie ISSN:2070-1721 2017年10月

PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols

PRECIS框架:应用程序协议中国际化字符串的准备、实施和比较

Abstract

摘要

Application protocols using Unicode code points in protocol strings need to properly handle such strings in order to enforce internationalization rules for strings placed in various protocol slots (such as addresses and identifiers) and to perform valid comparison operations (e.g., for purposes of authentication or authorization). This document defines a framework enabling application protocols to perform the preparation, enforcement, and comparison of internationalized strings ("PRECIS") in a way that depends on the properties of Unicode code points and thus is more agile with respect to versions of Unicode. As a result, this framework provides a more sustainable approach to the handling of internationalized strings than the previous framework, known as Stringprep (RFC 3454). This document obsoletes RFC 7564.

在协议字符串中使用Unicode代码点的应用程序协议需要正确处理此类字符串,以便对放置在各种协议插槽(如地址和标识符)中的字符串强制执行国际化规则,并执行有效的比较操作(例如,出于认证或授权的目的)。本文档定义了一个框架,使应用程序协议能够以一种取决于Unicode代码点属性的方式执行国际化字符串(“PRECIS”)的准备、实施和比较,因此相对于Unicode版本来说更加灵活。因此,与以前的Stringprep(RFC 3454)框架相比,该框架提供了一种更可持续的方法来处理国际化字符串。本文件淘汰RFC 7564。

Status of This Memo

关于下段备忘

This is an Internet Standards Track document.

这是一份互联网标准跟踪文件。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。有关互联网标准的更多信息,请参见RFC 7841第2节。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8264.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问https://www.rfc-editor.org/info/rfc8264.

Copyright Notice

版权公告

Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2017 IETF信托基金和确定为文件作者的人员。版权所有。

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
        
   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
        

publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

本文件的出版。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。从本文件中提取的代码组件必须包括信托法律条款第4.e节中所述的简化BSD许可证文本,并提供简化BSD许可证中所述的无担保。

Table of Contents

目录

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   6
   3.  Preparation, Enforcement, and Comparison  . . . . . . . . . .   6
   4.  String Classes  . . . . . . . . . . . . . . . . . . . . . . .   8
     4.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   8
     4.2.  IdentifierClass . . . . . . . . . . . . . . . . . . . . .   9
       4.2.1.  Valid . . . . . . . . . . . . . . . . . . . . . . . .   9
       4.2.2.  Contextual Rule Required  . . . . . . . . . . . . . .  10
       4.2.3.  Disallowed  . . . . . . . . . . . . . . . . . . . . .  10
       4.2.4.  Unassigned  . . . . . . . . . . . . . . . . . . . . .  10
       4.2.5.  Examples  . . . . . . . . . . . . . . . . . . . . . .  11
     4.3.  FreeformClass . . . . . . . . . . . . . . . . . . . . . .  11
       4.3.1.  Valid . . . . . . . . . . . . . . . . . . . . . . . .  11
       4.3.2.  Contextual Rule Required  . . . . . . . . . . . . . .  12
       4.3.3.  Disallowed  . . . . . . . . . . . . . . . . . . . . .  12
       4.3.4.  Unassigned  . . . . . . . . . . . . . . . . . . . . .  12
       4.3.5.  Examples  . . . . . . . . . . . . . . . . . . . . . .  12
     4.4.  Summary . . . . . . . . . . . . . . . . . . . . . . . . .  12
   5.  Profiles  . . . . . . . . . . . . . . . . . . . . . . . . . .  14
     5.1.  Profiles Must Not Be Multiplied beyond Necessity  . . . .  14
     5.2.  Rules . . . . . . . . . . . . . . . . . . . . . . . . . .  15
       5.2.1.  Width Mapping Rule  . . . . . . . . . . . . . . . . .  15
       5.2.2.  Additional Mapping Rule . . . . . . . . . . . . . . .  15
       5.2.3.  Case Mapping Rule . . . . . . . . . . . . . . . . . .  16
       5.2.4.  Normalization Rule  . . . . . . . . . . . . . . . . .  16
       5.2.5.  Directionality Rule . . . . . . . . . . . . . . . . .  17
     5.3.  A Note about Spaces . . . . . . . . . . . . . . . . . . .  18
   6.  Applications  . . . . . . . . . . . . . . . . . . . . . . . .  18
     6.1.  How to Use PRECIS in Applications . . . . . . . . . . . .  18
     6.2.  Further Excluded Characters . . . . . . . . . . . . . . .  20
     6.3.  Building Application-Layer Constructs . . . . . . . . . .  20
   7.  Order of Operations . . . . . . . . . . . . . . . . . . . . .  21
   8.  Code Point Properties . . . . . . . . . . . . . . . . . . . .  21
   9.  Category Definitions Used to Calculate Derived Property . . .  24
     9.1.  LetterDigits (A)  . . . . . . . . . . . . . . . . . . . .  25
     9.2.  Unstable (B)  . . . . . . . . . . . . . . . . . . . . . .  25
     9.3.  IgnorableProperties (C) . . . . . . . . . . . . . . . . .  25
     9.4.  IgnorableBlocks (D) . . . . . . . . . . . . . . . . . . .  25
     9.5.  LDH (E) . . . . . . . . . . . . . . . . . . . . . . . . .  25
        
   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   6
   3.  Preparation, Enforcement, and Comparison  . . . . . . . . . .   6
   4.  String Classes  . . . . . . . . . . . . . . . . . . . . . . .   8
     4.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   8
     4.2.  IdentifierClass . . . . . . . . . . . . . . . . . . . . .   9
       4.2.1.  Valid . . . . . . . . . . . . . . . . . . . . . . . .   9
       4.2.2.  Contextual Rule Required  . . . . . . . . . . . . . .  10
       4.2.3.  Disallowed  . . . . . . . . . . . . . . . . . . . . .  10
       4.2.4.  Unassigned  . . . . . . . . . . . . . . . . . . . . .  10
       4.2.5.  Examples  . . . . . . . . . . . . . . . . . . . . . .  11
     4.3.  FreeformClass . . . . . . . . . . . . . . . . . . . . . .  11
       4.3.1.  Valid . . . . . . . . . . . . . . . . . . . . . . . .  11
       4.3.2.  Contextual Rule Required  . . . . . . . . . . . . . .  12
       4.3.3.  Disallowed  . . . . . . . . . . . . . . . . . . . . .  12
       4.3.4.  Unassigned  . . . . . . . . . . . . . . . . . . . . .  12
       4.3.5.  Examples  . . . . . . . . . . . . . . . . . . . . . .  12
     4.4.  Summary . . . . . . . . . . . . . . . . . . . . . . . . .  12
   5.  Profiles  . . . . . . . . . . . . . . . . . . . . . . . . . .  14
     5.1.  Profiles Must Not Be Multiplied beyond Necessity  . . . .  14
     5.2.  Rules . . . . . . . . . . . . . . . . . . . . . . . . . .  15
       5.2.1.  Width Mapping Rule  . . . . . . . . . . . . . . . . .  15
       5.2.2.  Additional Mapping Rule . . . . . . . . . . . . . . .  15
       5.2.3.  Case Mapping Rule . . . . . . . . . . . . . . . . . .  16
       5.2.4.  Normalization Rule  . . . . . . . . . . . . . . . . .  16
       5.2.5.  Directionality Rule . . . . . . . . . . . . . . . . .  17
     5.3.  A Note about Spaces . . . . . . . . . . . . . . . . . . .  18
   6.  Applications  . . . . . . . . . . . . . . . . . . . . . . . .  18
     6.1.  How to Use PRECIS in Applications . . . . . . . . . . . .  18
     6.2.  Further Excluded Characters . . . . . . . . . . . . . . .  20
     6.3.  Building Application-Layer Constructs . . . . . . . . . .  20
   7.  Order of Operations . . . . . . . . . . . . . . . . . . . . .  21
   8.  Code Point Properties . . . . . . . . . . . . . . . . . . . .  21
   9.  Category Definitions Used to Calculate Derived Property . . .  24
     9.1.  LetterDigits (A)  . . . . . . . . . . . . . . . . . . . .  25
     9.2.  Unstable (B)  . . . . . . . . . . . . . . . . . . . . . .  25
     9.3.  IgnorableProperties (C) . . . . . . . . . . . . . . . . .  25
     9.4.  IgnorableBlocks (D) . . . . . . . . . . . . . . . . . . .  25
     9.5.  LDH (E) . . . . . . . . . . . . . . . . . . . . . . . . .  25
        
     9.6.  Exceptions (F)  . . . . . . . . . . . . . . . . . . . . .  25
     9.7.  BackwardCompatible (G)  . . . . . . . . . . . . . . . . .  25
     9.8.  JoinControl (H) . . . . . . . . . . . . . . . . . . . . .  26
     9.9.  OldHangulJamo (I) . . . . . . . . . . . . . . . . . . . .  26
     9.10. Unassigned (J)  . . . . . . . . . . . . . . . . . . . . .  26
     9.11. ASCII7 (K)  . . . . . . . . . . . . . . . . . . . . . . .  26
     9.12. Controls (L)  . . . . . . . . . . . . . . . . . . . . . .  27
     9.13. PrecisIgnorableProperties (M) . . . . . . . . . . . . . .  27
     9.14. Spaces (N)  . . . . . . . . . . . . . . . . . . . . . . .  27
     9.15. Symbols (O) . . . . . . . . . . . . . . . . . . . . . . .  27
     9.16. Punctuation (P) . . . . . . . . . . . . . . . . . . . . .  27
     9.17. HasCompat (Q) . . . . . . . . . . . . . . . . . . . . . .  28
     9.18. OtherLetterDigits (R) . . . . . . . . . . . . . . . . . .  28
   10. Guidelines for Designated Experts . . . . . . . . . . . . . .  28
   11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  29
     11.1.  PRECIS Derived Property Value Registry . . . . . . . . .  29
     11.2.  PRECIS Base Classes Registry . . . . . . . . . . . . . .  29
     11.3.  PRECIS Profiles Registry . . . . . . . . . . . . . . . .  30
   12. Security Considerations . . . . . . . . . . . . . . . . . . .  32
     12.1.  General Issues . . . . . . . . . . . . . . . . . . . . .  32
     12.2.  Use of the IdentifierClass . . . . . . . . . . . . . . .  33
     12.3.  Use of the FreeformClass . . . . . . . . . . . . . . . .  33
     12.4.  Local Character Set Issues . . . . . . . . . . . . . . .  33
     12.5.  Visually Similar Characters  . . . . . . . . . . . . . .  33
     12.6.  Security of Passwords  . . . . . . . . . . . . . . . . .  35
   13. Interoperability Considerations . . . . . . . . . . . . . . .  36
     13.1.  Coded Character Sets . . . . . . . . . . . . . . . . . .  36
     13.2.  Dependency on Unicode  . . . . . . . . . . . . . . . . .  37
     13.3.  Encoding . . . . . . . . . . . . . . . . . . . . . . . .  37
     13.4.  Unicode Versions . . . . . . . . . . . . . . . . . . . .  37
     13.5.  Potential Changes to Handling of Certain Unicode Code
            Points . . . . . . . . . . . . . . . . . . . . . . . . .  37
   14. References  . . . . . . . . . . . . . . . . . . . . . . . . .  38
     14.1.  Normative References . . . . . . . . . . . . . . . . . .  38
     14.2.  Informative References . . . . . . . . . . . . . . . . .  39
   Appendix A.  Changes from RFC 7564  . . . . . . . . . . . . . . .  43
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  43
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  43
        
     9.6.  Exceptions (F)  . . . . . . . . . . . . . . . . . . . . .  25
     9.7.  BackwardCompatible (G)  . . . . . . . . . . . . . . . . .  25
     9.8.  JoinControl (H) . . . . . . . . . . . . . . . . . . . . .  26
     9.9.  OldHangulJamo (I) . . . . . . . . . . . . . . . . . . . .  26
     9.10. Unassigned (J)  . . . . . . . . . . . . . . . . . . . . .  26
     9.11. ASCII7 (K)  . . . . . . . . . . . . . . . . . . . . . . .  26
     9.12. Controls (L)  . . . . . . . . . . . . . . . . . . . . . .  27
     9.13. PrecisIgnorableProperties (M) . . . . . . . . . . . . . .  27
     9.14. Spaces (N)  . . . . . . . . . . . . . . . . . . . . . . .  27
     9.15. Symbols (O) . . . . . . . . . . . . . . . . . . . . . . .  27
     9.16. Punctuation (P) . . . . . . . . . . . . . . . . . . . . .  27
     9.17. HasCompat (Q) . . . . . . . . . . . . . . . . . . . . . .  28
     9.18. OtherLetterDigits (R) . . . . . . . . . . . . . . . . . .  28
   10. Guidelines for Designated Experts . . . . . . . . . . . . . .  28
   11. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  29
     11.1.  PRECIS Derived Property Value Registry . . . . . . . . .  29
     11.2.  PRECIS Base Classes Registry . . . . . . . . . . . . . .  29
     11.3.  PRECIS Profiles Registry . . . . . . . . . . . . . . . .  30
   12. Security Considerations . . . . . . . . . . . . . . . . . . .  32
     12.1.  General Issues . . . . . . . . . . . . . . . . . . . . .  32
     12.2.  Use of the IdentifierClass . . . . . . . . . . . . . . .  33
     12.3.  Use of the FreeformClass . . . . . . . . . . . . . . . .  33
     12.4.  Local Character Set Issues . . . . . . . . . . . . . . .  33
     12.5.  Visually Similar Characters  . . . . . . . . . . . . . .  33
     12.6.  Security of Passwords  . . . . . . . . . . . . . . . . .  35
   13. Interoperability Considerations . . . . . . . . . . . . . . .  36
     13.1.  Coded Character Sets . . . . . . . . . . . . . . . . . .  36
     13.2.  Dependency on Unicode  . . . . . . . . . . . . . . . . .  37
     13.3.  Encoding . . . . . . . . . . . . . . . . . . . . . . . .  37
     13.4.  Unicode Versions . . . . . . . . . . . . . . . . . . . .  37
     13.5.  Potential Changes to Handling of Certain Unicode Code
            Points . . . . . . . . . . . . . . . . . . . . . . . . .  37
   14. References  . . . . . . . . . . . . . . . . . . . . . . . . .  38
     14.1.  Normative References . . . . . . . . . . . . . . . . . .  38
     14.2.  Informative References . . . . . . . . . . . . . . . . .  39
   Appendix A.  Changes from RFC 7564  . . . . . . . . . . . . . . .  43
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  43
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  43
        
1. Introduction
1. 介绍

Application protocols using Unicode code points [Unicode] in protocol strings need to properly handle such strings in order to enforce internationalization rules for strings placed in various protocol slots (such as addresses and identifiers) and to perform valid comparison operations (e.g., for purposes of authentication or authorization). This document defines a framework enabling application protocols to perform the preparation, enforcement, and

在协议字符串中使用Unicode码点[Unicode]的应用程序协议需要正确处理此类字符串,以便对放置在各种协议插槽(例如地址和标识符)中的字符串强制执行国际化规则,并执行有效的比较操作(例如,出于身份验证或授权的目的)。本文档定义了一个框架,使应用程序协议能够执行准备、实施和测试

comparison of internationalized strings ("PRECIS") in a way that depends on the properties of Unicode code points and thus is more agile with respect to versions of Unicode. (Note: PRECIS is restricted to Unicode and does not support any other coded character set [RFC6365].)

国际化字符串(“PRECIS”)的比较方式取决于Unicode代码点的属性,因此相对于Unicode版本更为灵活。(注意:PRECIS仅限于Unicode,不支持任何其他编码字符集[RFC6365]。)

As described in the PRECIS problem statement [RFC6885], many IETF protocols have used the Stringprep framework [RFC3454] as the basis for preparing, enforcing, and comparing protocol strings that contain Unicode code points, especially code points outside the ASCII range [RFC20]. The Stringprep framework was developed during work on the original technology for internationalized domain names (IDNs), here called "IDNA2003" [RFC3490], and Nameprep [RFC3491] was the Stringprep profile for IDNs. At the time, Stringprep was designed as a general framework so that other application protocols could define their own Stringprep profiles. Indeed, a number of application protocols defined such profiles.

如PRECIS问题声明[RFC6885]所述,许多IETF协议使用Stringprep框架[RFC3454]作为准备、实施和比较包含Unicode代码点的协议字符串的基础,特别是ASCII范围[RFC20]之外的代码点。Stringprep框架是在研究国际化域名(IDN)的原始技术时开发的,这里称为“IDNA2003”[RFC3490],Nameprep[RFC3491]是IDN的Stringprep配置文件。当时,Stringprep被设计为通用框架,以便其他应用程序协议可以定义自己的Stringprep配置文件。事实上,许多应用程序协议定义了这样的配置文件。

After the publication of [RFC3454] in 2002, several significant issues arose with the use of Stringprep in the IDN case, as documented in the IAB's recommendations regarding IDNs [RFC4690] (most significantly, Stringprep was tied to Unicode version 3.2). Therefore, the newer IDNA specifications, here called "IDNA2008" [RFC5890] [RFC5891] [RFC5892] [RFC5893] [RFC5894], no longer use Stringprep and Nameprep. This migration away from Stringprep for IDNs prompted other "customers" of Stringprep to consider new approaches to the preparation, enforcement, and comparison of internationalized strings, as described in [RFC6885].

2002年[RFC3454]出版后,在IDN案例中使用Stringprep出现了几个重大问题,如IAB关于IDN[RFC4690]的建议所述(最重要的是,Stringprep与Unicode版本3.2相关联)。因此,较新的IDNA规范(此处称为“IDNA2008”[RFC5890][RFC5891][RFC5892][RFC5893][RFC5894]不再使用Stringprep和Nameprep。从StRePrEP迁移到IDN,促使SrangPrIP的其他“客户”考虑新的方法来准备、实施和比较国际化的字符串,如[RCF685]中所描述的。

This document defines a framework for a post-Stringprep approach to the preparation, enforcement, and comparison of internationalized strings in application protocols, based on several principles:

本文档基于以下几项原则,为应用程序协议中国际化字符串的准备、实施和比较定义了一个后Stringprep方法框架:

1. Define a small set of string classes that specify the Unicode code points appropriate for common application-protocol constructs (where possible, maintaining compatibility with IDNA2008 to help ensure a more consistent user experience).

1. 定义一小组字符串类,用于指定适用于通用应用程序协议构造的Unicode代码点(如果可能,请保持与IDNA2008的兼容性,以帮助确保更一致的用户体验)。

2. Define each PRECIS string class in terms of Unicode code points and their properties so that an algorithm can be used to determine whether each code point or character category is (a) valid, (b) allowed in certain contexts, (c) disallowed, or (d) unassigned.

2. 根据Unicode码点及其属性定义每个PRECIS字符串类,以便使用算法确定每个码点或字符类别是否(a)有效,(b)在某些上下文中允许,(c)不允许,或(d)未指定。

3. Use an "inclusion model" such that a string class consists only of code points that are explicitly allowed, with the result that any code point not explicitly allowed is forbidden.

3. 使用“包含模型”,使字符串类只包含显式允许的代码点,从而禁止任何不显式允许的代码点。

4. Enable application protocols to define profiles of the PRECIS string classes if necessary (addressing matters such as width mapping, case mapping, Unicode normalization, and directionality), but strongly discourage the multiplication of profiles beyond necessity in order to avoid violations of the "Principle of Least Astonishment".

4. 如有必要,允许应用程序协议定义PRECIS字符串类的配置文件(解决宽度映射、大小写映射、Unicode规范化和方向性等问题),但强烈反对在必要情况下增加配置文件,以避免违反“最小惊讶原则”。

It is expected that this framework will yield the following benefits:

预计该框架将产生以下好处:

o Application protocols will be more agile with regard to Unicode versions (recognizing that complete agility cannot be realized in practice).

o 相对于Unicode版本,应用程序协议将更加灵活(认识到在实践中无法实现完全的灵活性)。

o Implementers will be able to share code point tables and software code across application protocols, most likely by means of software libraries.

o 实现者将能够跨应用程序协议共享代码点表和软件代码,最有可能的方式是通过软件库。

o End users will be able to acquire more accurate expectations about the code points that are acceptable in various contexts. Given this more uniform set of string classes, it is also expected that copy/paste operations between software implementing different application protocols will be more predictable and coherent.

o 最终用户将能够获得在各种环境下可接受的关于代码点的更准确期望。考虑到这组更加统一的字符串类,我们还希望实现不同应用程序协议的软件之间的复制/粘贴操作将更加可预测和一致。

Whereas the string classes define the "baseline" code points for a range of applications, profiling enables application protocols to apply the string classes in ways that are appropriate for common constructs such as usernames [RFC8265], opaque strings such as passwords [RFC8265], and nicknames [RFC8266]. Profiles are responsible for defining the handling of right-to-left code points as well as various mapping operations of the kind also discussed for IDNs in [RFC5895], such as case preservation or lowercasing, Unicode normalization, mapping of certain code points to other code points or to nothing, and mapping of fullwidth and halfwidth code points.

虽然字符串类定义了一系列应用程序的“基线”代码点,但分析使应用程序协议能够以适用于常见构造(如用户名[RFC8265]、不透明字符串(如密码[RFC8265])和昵称[RFC8266]的方式应用字符串类。配置文件负责定义从右到左代码点的处理以及[RFC5895]中也讨论过的IDN类型的各种映射操作,例如大小写保留或小写、Unicode规范化、将某些代码点映射到其他代码点或映射到零,以及全宽和半宽代码点的映射。

When an application applies a profile of a PRECIS string class, it transforms an input string (which might or might not be conforming) into an output string that definitively conforms to the profile. In particular, this document focuses on the resulting ability to achieve the following objectives:

当应用程序应用PRECIS string类的概要文件时,它会将输入字符串(可能符合也可能不符合)转换为最终符合概要文件的输出字符串。特别是,本文件侧重于实现以下目标的能力:

a. Enforcing all the rules of a profile for a single output string to check whether the output string conforms to the rules of the profile and thus determine if a string can be included in a protocol slot, communicated to another entity within a protocol, stored in a retrieval system, etc.

a. 对单个输出字符串强制执行配置文件的所有规则,以检查输出字符串是否符合配置文件的规则,从而确定字符串是否可以包括在协议插槽中、是否可以与协议内的另一个实体通信、是否可以存储在检索系统中等。

b. Comparing two output strings to determine if they are equivalent, typically through octet-for-octet matching to test for

b. 比较两个输出字符串以确定它们是否等效,通常通过八位字节匹配来测试

"bit-string identity" (e.g., to make an access decision for purposes of authentication or authorization as further described in [RFC6943]).

“位字符串标识”(例如,为了认证或授权的目的做出访问决定,如[RFC6943]中所述)。

The opportunity to define profiles naturally introduces the possibility of a proliferation of profiles, thus potentially mitigating the benefits of common code and violating user expectations. See Section 5 for a discussion of this important topic.

定义概要文件的机会自然会带来概要文件激增的可能性,因此可能会降低通用代码的好处,并违反用户期望。有关此重要主题的讨论,请参见第5节。

In addition, it is extremely important for protocol designers and application developers to understand that the transformation of an input string to an output string is rarely reversible. As one relatively simple example, case mapping would transform an input string of "StPeter" to an output string of "stpeter", thus leading to a loss of information about the capitalization of the first and third characters. Similar considerations apply to other forms of mapping and normalization.

此外,对于协议设计者和应用程序开发人员来说,理解从输入字符串到输出字符串的转换很少是可逆的是非常重要的。作为一个相对简单的示例,大小写映射会将输入字符串“StPeter”转换为输出字符串“StPeter”,从而导致第一个和第三个字符的大小写信息丢失。类似的考虑也适用于其他形式的映射和规范化。

Although this framework is similar to IDNA2008 and includes by reference some of the character categories defined in [RFC5892], it defines additional character categories to meet the needs of common application protocols other than DNS.

尽管该框架类似于IDNA2008,并通过引用包括[RFC5892]中定义的一些字符类别,但它定义了其他字符类别,以满足除DNS以外的常见应用程序协议的需要。

The character categories and calculation rules defined under Sections 8 and 9 are normative and apply to all Unicode code points. The code point table that results from applying the character categories and calculation rules to the latest version of Unicode can be found in an IANA registry (see Section 11).

第8节和第9节中定义的字符类别和计算规则是规范性的,适用于所有Unicode代码点。将字符类别和计算规则应用于最新版本的Unicode后产生的代码点表可以在IANA注册表中找到(参见第11节)。

2. Terminology
2. 术语

Many important terms used in this document are defined in [RFC5890], [RFC6365], [RFC6885], and [Unicode]. The terms "left-to-right" (LTR) and "right-to-left" (RTL) are defined in Unicode Standard Annex #9 [UAX9].

本文档中使用的许多重要术语在[RFC5890]、[RFC6365]、[RFC6885]和[Unicode]中定义。术语“从左到右”(LTR)和“从右到左”(RTL)的定义见Unicode标准附录#9[UAX9]。

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“建议”、“不建议”、“可”和“可选”在所有大写字母出现时(如图所示)应按照BCP 14[RFC2119][RFC8174]所述进行解释。

3. Preparation, Enforcement, and Comparison
3. 准备、实施和比较

This document distinguishes between three different actions that an entity can take with regard to a string:

本文档区分实体可以对字符串执行的三种不同操作:

o Enforcement entails applying all of the rules specified for a particular string class, or profile thereof, to a single input string, for the purpose of checking whether the string conforms to all of the rules and thus determining if the string can be used in a given protocol slot.

o 强制要求将为特定字符串类或其配置文件指定的所有规则应用于单个输入字符串,以检查该字符串是否符合所有规则,从而确定该字符串是否可以在给定的协议时隙中使用。

o Comparison entails applying all of the rules specified for a particular string class, or profile thereof, to two separate input strings, for the purpose of determining if the two strings are equivalent.

o 比较需要将为特定字符串类或其配置文件指定的所有规则应用于两个单独的输入字符串,以确定这两个字符串是否等效。

o Preparation primarily entails ensuring that the code points in a single input string are allowed by the underlying PRECIS string class, and sometimes also entails applying one or more of the rules specified for a particular string class or profile thereof. Preparation can be appropriate for constrained devices that can to some extent restrict the code points in a string to a limited repertoire of characters but that do not have the processing power or onboard memory to perform operations such as Unicode normalization. However, preparation does not ensure that an input string conforms to all of the rules for a string class or profile thereof.

o 准备工作主要包括确保基础PRECIS字符串类允许单个输入字符串中的代码点,有时还包括应用为特定字符串类或其配置文件指定的一个或多个规则。准备工作适用于受约束的设备,这些设备在某种程度上可以将字符串中的代码点限制为有限的字符集,但没有处理能力或板载内存来执行Unicode规范化等操作。但是,准备并不能确保输入字符串符合字符串类或其配置文件的所有规则。

Note: The term "preparation" as used in this specification and related documents has a much more limited scope than it did in Stringprep; it essentially refers to a kind of preprocessing of an input string, not the actual operations that apply internationalization rules to produce an output string (here termed "enforcement") or to compare two output strings (here termed "comparison").

注:与Stringprep相比,本规范和相关文件中使用的术语“准备”的范围更为有限;它本质上是指输入字符串的一种预处理,而不是应用国际化规则生成输出字符串(此处称为“强制”)或比较两个输出字符串(此处称为“比较”)的实际操作。

In most cases, authoritative entities such as servers are responsible for enforcement, whereas subsidiary entities such as clients are responsible only for preparation. The rationale for this distinction is that clients might not have the facilities (in terms of device memory and processing power) to enforce all the rules regarding internationalized strings (such as width mapping and Unicode normalization), although they can more easily limit the repertoire of characters they offer to an end user. By contrast, it is assumed that a server would have more capacity to enforce the rules, and in any case a server acts as an authority regarding allowable strings in protocol slots such as addresses and endpoint identifiers. In addition, a client cannot necessarily be trusted to properly generate such strings, especially for security-sensitive contexts such as authentication and authorization.

在大多数情况下,服务器等权威实体负责执行,而客户端等附属实体只负责准备。这种区别的基本原理是,客户机可能没有设施(就设备内存和处理能力而言)来强制执行有关国际化字符串的所有规则(如宽度映射和Unicode规范化),尽管他们可以更容易地限制向最终用户提供的字符集。相比之下,假设服务器将具有更大的能力来实施规则,并且在任何情况下,服务器充当协议插槽中允许的字符串(例如地址和端点标识符)的权威。此外,不一定要信任客户端来正确生成此类字符串,特别是对于安全敏感的上下文,如身份验证和授权。

4. String Classes
4. 字符串类
4.1. Overview
4.1. 概述

Starting in 2010, various "customers" of Stringprep began to discuss the need to define a post-Stringprep approach to the preparation and comparison of internationalized strings other than IDNs. This community analyzed the existing Stringprep profiles and also weighed the costs and benefits of defining a relatively small set of Unicode code points that would minimize the potential for user confusion caused by visually similar code points (and thus be relatively "safe") vs. defining a much larger set of Unicode code points that would maximize the potential for user creativity (and thus be relatively "expressive"). As a result, the community concluded that most existing uses could be addressed by two string classes:

从2010年开始,Stringprep的各个“客户”开始讨论需要定义一种Stringprep后的方法来准备和比较除IDN以外的国际化字符串。该社区分析了现有的Stringprep配置文件,并权衡了定义一组相对较小的Unicode代码点的成本和收益,这些代码点可以最大限度地减少视觉上相似的代码点(因此相对“安全”)导致用户混淆的可能性与定义一组更大的Unicode代码点相比,这将最大限度地发挥用户创造力的潜力(因此具有相对的“表现力”)。因此,社区得出结论,大多数现有用途可以通过两个字符串类来解决:

IdentifierClass: a sequence of letters, numbers, and some symbols that is used to identify or address a network entity such as a user account, a venue (e.g., a chat room), an information source (e.g., a data feed), or a collection of data (e.g., a file); the intent is that this class will minimize user confusion in a wide variety of application protocols, with the result that safety has been prioritized over expressiveness for this class.

IdentifierClass:一系列字母、数字和一些符号,用于识别或寻址网络实体,如用户帐户、场所(如聊天室)、信息源(如数据源)或数据集合(如文件);其目的是,此类将最大限度地减少各种应用程序协议中的用户混淆,从而使此类的安全性优先于表达性。

FreeformClass: a sequence of letters, numbers, symbols, spaces, and other code points that is used for free-form strings, including passwords as well as display elements such as human-friendly nicknames for devices or for participants in a chat room; the intent is that this class will allow nearly any Unicode code point, with the result that expressiveness has been prioritized over safety for this class. Note well that protocol designers, application developers, service providers, and end users might not understand or be able to enter all of the code points that can be included in the FreeformClass (see Section 12.3 for details).

FreeformClass:用于自由格式字符串的字母、数字、符号、空格和其他代码点序列,包括密码以及显示元素,如设备或聊天室参与者的人性化昵称;其目的是该类将允许几乎任何Unicode代码点,从而使该类的表达性优先于安全性。请注意,协议设计人员、应用程序开发人员、服务提供商和最终用户可能不理解或无法输入FreeformClass中包含的所有代码点(有关详细信息,请参阅第12.3节)。

Future specifications might define additional PRECIS string classes, such as a class that falls somewhere between the IdentifierClass and the FreeformClass. At this time, it is not clear how useful such a class would be. In any case, because application developers are able to define profiles of PRECIS string classes, a protocol needing a construct between the IdentifierClass and the FreeformClass could define a restricted profile of the FreeformClass if needed.

未来的规范可能会定义其他PRECIS字符串类,例如位于IdentifierClass和FreeformClass之间的类。目前还不清楚这样一个类有多有用。在任何情况下,由于应用程序开发人员能够定义PRECIS字符串类的概要文件,因此需要在IdentifierClass和FreeformClass之间构造的协议可以在需要时定义FreeformClass的受限概要文件。

The following subsections discuss the IdentifierClass and FreeformClass in more detail, with reference to the dimensions described in Section 5 of [RFC6885]. Each string class is defined by the following behavioral rules:

以下小节将参考[RFC6885]第5节中描述的尺寸,更详细地讨论IdentifierClass和FreeformClass。每个字符串类由以下行为规则定义:

Valid: Defines which code points are treated as valid for the string.

有效:定义哪些代码点对字符串有效。

Contextual Rule Required: Defines which code points are treated as allowed only if the requirements of a contextual rule are met (i.e., either CONTEXTJ or CONTEXTO as originally defined in the IDNA2008 specifications).

所需上下文规则:定义仅当满足上下文规则的要求(即IDNA2008规范中最初定义的CONTEXTJ或CONTEXTO)时,才允许处理哪些代码点。

Disallowed: Defines which code points need to be excluded from the string.

不允许:定义需要从字符串中排除哪些代码点。

Unassigned: Defines application behavior in the presence of code points that are unknown (i.e., not yet designated) for the version of Unicode used by the application.

未指定:定义应用程序使用的Unicode版本中存在未知(即尚未指定)代码点时的应用程序行为。

This document defines the valid, contextual rule required, disallowed, and unassigned rules for the IdentifierClass and FreeformClass. As described under Section 5, profiles of these string classes are responsible for defining the width mapping, additional mapping, case mapping, normalization, and directionality rules.

本文档为IdentifierClass和FreeformClass定义了有效、上下文规则必需、不允许和未分配的规则。如第5节所述,这些字符串类的概要文件负责定义宽度映射、附加映射、大小写映射、规范化和方向性规则。

4.2. IdentifierClass
4.2. 标识类

Most application technologies need strings that can be used to refer to, include, or communicate protocol strings like usernames, filenames, data feed identifiers, and chat room names. We group such strings into a class called "IdentifierClass" having the following features.

大多数应用程序技术需要可用于引用、包含或通信协议字符串(如用户名、文件名、数据源标识符和聊天室名称)的字符串。我们将这些字符串分组到一个名为“IdentifierClass”的类中,该类具有以下特性。

4.2.1. Valid
4.2.1. 有效的

o Code points traditionally used as letters and numbers in writing systems, i.e., the LetterDigits ("A") category first defined in [RFC5892] and listed here under Section 9.1.

o 传统上在书写系统中用作字母和数字的代码点,即[RFC5892]中首次定义的字母数字(“A”)类别,并在第9.1节中列出。

o Code points in the range U+0021 through U+007E, i.e., the (printable) ASCII7 ("K") category defined under Section 9.11. These code points are "grandfathered" into PRECIS and thus are valid even if they would otherwise be disallowed according to the property-based rules specified in the next section.

o U+0021至U+007E范围内的代码点,即第9.11节定义的(可打印)ASCII7(“K”)类别。这些代码点在PRECIS中是“祖父式”的,因此即使根据下一节中指定的基于属性的规则不允许这些代码点,它们也是有效的。

Note: Although the PRECIS IdentifierClass reuses the LetterDigits category from IDNA2008, the range of code points allowed in the IdentifierClass is wider than the range of code points allowed in IDNA2008. The main reason is that IDNA2008 applies the Unstable ("B") category (Section 9.2) before the LetterDigits

注意:虽然PRECIS IdentifierClass重用IDNA2008中的LetterDigits类别,但IdentifierClass中允许的代码点范围比IDNA2008中允许的代码点范围更广。主要原因是IDNA2008在字母数字之前应用了不稳定(“B”)类别(第9.2节)

category, thus disallowing uppercase code points, whereas the IdentifierClass does not apply the Unstable category.

类别,因此不允许大写代码点,而IdentifierClass不应用不稳定类别。

4.2.2. Contextual Rule Required
4.2.2. 需要上下文规则

o A number of code points from the Exceptions ("F") category defined under Section 9.6.

o 第9.6节规定的例外(“F”)类别中的若干代码点。

o Joining code points, i.e., the JoinControl ("H") category defined under Section 9.8.

o 连接代码点,即第9.8节定义的连接控制(“H”)类别。

4.2.3. Disallowed
4.2.3. 不允许

o Old Hangul Jamo code points, i.e., the OldHangulJamo ("I") category defined under Section 9.9.

o 旧韩国语Jamo代码点,即第9.9节定义的旧韩国语Jamo(“i”)类别。

o Control code points, i.e., the Controls ("L") category defined under Section 9.12.

o 控制代码点,即第9.12节定义的控制(“L”)类别。

o Ignorable code points, i.e., the PrecisIgnorableProperties ("M") category defined under Section 9.13.

o 可忽略代码点,即第9.13节定义的可忽略属性(“M”)类别。

o Space code points, i.e., the Spaces ("N") category defined under Section 9.14.

o 空间代码点,即第9.14节定义的空间(“N”)类别。

o Symbol code points, i.e., the Symbols ("O") category defined under Section 9.15.

o 符号代码点,即第9.15节定义的符号(“O”)类别。

o Punctuation code points, i.e., the Punctuation ("P") category defined under Section 9.16.

o 标点符号代码点,即第9.16节定义的标点符号(“P”)类别。

o Any code point that is decomposed and recomposed into something other than itself under Unicode Normalization Form KC, i.e., the HasCompat ("Q") category defined under Section 9.17. These code points are disallowed even if they would otherwise be valid according to the property-based rules specified in the previous section.

o 根据Unicode规范化格式KC分解并重新组合为自身以外的任何代码点,即第9.17节定义的HasCompat(“Q”)类别。这些代码点是不允许的,即使根据上一节中指定的基于属性的规则,它们本来是有效的。

o Letters and digits other than the "traditional" letters and digits allowed in IDNs, i.e., the OtherLetterDigits ("R") category defined under Section 9.18.

o IDN中允许的“传统”字母和数字以外的字母和数字,即第9.18节定义的其他字母数字(“R”)类别。

4.2.4. Unassigned
4.2.4. 未分配

Any code points that are not yet designated in the Unicode coded character set are considered unassigned for purposes of the IdentifierClass, and such code points are to be treated as disallowed. See Section 9.10.

出于IdentifierClass的目的,任何尚未在Unicode编码字符集中指定的代码点都被视为未指定,并且此类代码点将被视为不允许。见第9.10节。

4.2.5. Examples
4.2.5. 例子

As described in the Introduction to this document, the string classes do not handle all issues related to string preparation and comparison (such as case mapping); instead, such issues are handled at the level of profiles. Examples for profiles of the IdentifierClass can be found in [RFC8265] (the UsernameCaseMapped and UsernameCasePreserved profiles).

如本文档简介所述,字符串类并不处理与字符串准备和比较相关的所有问题(如案例映射);相反,这些问题是在概要文件级别处理的。IdentifierClass的配置文件示例可在[RFC8265](UsernameCaseMapped和UsernameCasePreserved配置文件)中找到。

4.3. FreeformClass
4.3. 自由格式类

Some application technologies need strings that can be used in a free-form way, e.g., as a password in an authentication exchange (see [RFC8265]) or a nickname in a chat room (see [RFC8266]). We group such things into a class called "FreeformClass" having the following features.

一些应用程序技术需要可以自由形式使用的字符串,例如,作为身份验证交换中的密码(请参见[RFC8265])或聊天室中的昵称(请参见[RFC8266])。我们将这些东西分组到一个名为“FreeformClass”的类中,该类具有以下特性。

Security Warning: As mentioned, the FreeformClass prioritizes expressiveness over safety; Section 12.3 describes some of the security hazards involved with using or profiling the FreeformClass.

安全警告:如前所述,FreeformClass将表现力置于安全之上;第12.3节描述了使用或分析FreeformClass所涉及的一些安全隐患。

Security Warning: Consult Section 12.6 for relevant security considerations when strings conforming to the FreeformClass, or a profile thereof, are used as passwords.

安全警告:当符合FreeformClass或其配置文件的字符串用作密码时,请参阅第12.6节以了解相关安全注意事项。

4.3.1. Valid
4.3.1. 有效的

o Traditional letters and numbers, i.e., the LetterDigits ("A") category first defined in [RFC5892] and listed here under Section 9.1.

o 传统字母和数字,即[RFC5892]中首次定义的字母数字(“A”)类别,并在第9.1节中列出。

o Code points in the range U+0021 through U+007E, i.e., the (printable) ASCII7 ("K") category defined under Section 9.11.

o U+0021至U+007E范围内的代码点,即第9.11节定义的(可打印)ASCII7(“K”)类别。

o Space code points, i.e., the Spaces ("N") category defined under Section 9.14.

o 空间代码点,即第9.14节定义的空间(“N”)类别。

o Symbol code points, i.e., the Symbols ("O") category defined under Section 9.15.

o 符号代码点,即第9.15节定义的符号(“O”)类别。

o Punctuation code points, i.e., the Punctuation ("P") category defined under Section 9.16.

o 标点符号代码点,即第9.16节定义的标点符号(“P”)类别。

o Any code point that is decomposed and recomposed into something other than itself under Unicode Normalization Form KC, i.e., the HasCompat ("Q") category defined under Section 9.17.

o 根据Unicode规范化格式KC分解并重新组合为自身以外的任何代码点,即第9.17节定义的HasCompat(“Q”)类别。

o Letters and digits other than the "traditional" letters and digits allowed in IDNs, i.e., the OtherLetterDigits ("R") category defined under Section 9.18.

o IDN中允许的“传统”字母和数字以外的字母和数字,即第9.18节定义的其他字母数字(“R”)类别。

4.3.2. Contextual Rule Required
4.3.2. 需要上下文规则

o A number of code points from the Exceptions ("F") category defined under Section 9.6.

o 第9.6节规定的例外(“F”)类别中的若干代码点。

o Joining code points, i.e., the JoinControl ("H") category defined under Section 9.8.

o 连接代码点,即第9.8节定义的连接控制(“H”)类别。

4.3.3. Disallowed
4.3.3. 不允许

o Old Hangul Jamo code points, i.e., the OldHangulJamo ("I") category defined under Section 9.9.

o 旧韩国语Jamo代码点,即第9.9节定义的旧韩国语Jamo(“i”)类别。

o Control code points, i.e., the Controls ("L") category defined under Section 9.12.

o 控制代码点,即第9.12节定义的控制(“L”)类别。

o Ignorable code points, i.e., the PrecisIgnorableProperties ("M") category defined under Section 9.13.

o 可忽略代码点,即第9.13节定义的可忽略属性(“M”)类别。

4.3.4. Unassigned
4.3.4. 未分配

Any code points that are not yet designated in the Unicode coded character set are considered unassigned for purposes of the FreeformClass, and such code points are to be treated as disallowed.

出于FreeformClass的目的,任何尚未在Unicode编码字符集中指定的代码点都被视为未指定,并且此类代码点将被视为不允许。

4.3.5. Examples
4.3.5. 例子

As described in the Introduction to this document, the string classes do not handle all issues related to string preparation and comparison (such as case mapping); instead, such issues are handled at the level of profiles. Examples for profiles of the FreeformClass can be found in [RFC8265] (the OpaqueString profile) and [RFC8266] (the Nickname profile).

如本文档简介所述,字符串类并不处理与字符串准备和比较相关的所有问题(如案例映射);相反,这些问题是在概要文件级别处理的。FreeformClass的配置文件示例可以在[RFC8265](OpaqueString配置文件)和[RFC8266](昵称配置文件)中找到。

4.4. Summary
4.4. 总结

The following table summarizes the differences between the IdentifierClass and the FreeformClass (i.e., the disposition of a code point as valid, contextual rule required, disallowed, or unassigned), depending on its PRECIS category.

下表总结了IdentifierClass和FreeformClass之间的差异(即,根据其PRECIS类别将代码点配置为有效、需要上下文规则、不允许或未指定)。

    +===============================+=================+===============+
    |        CATEGORY               | IDENTIFIERCLASS | FREEFORMCLASS |
    +===============================+=================+===============+
    | (A) LetterDigits              | Valid           | Valid         |
    +-------------------------------+-----------------+---------------+
    | (B) Unstable                  |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (C) IgnorableProperties       |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (D) IgnorableBlocks           |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (E) LDH                       |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (F) Exceptions                | Contextual      | Contextual    |
    |                               | Rule Required   | Rule Required |
    +-------------------------------+-----------------+---------------+
    | (G) BackwardCompatible        |      [Handled by IDNA Rules]    |
    +-------------------------------+-----------------+---------------+
    | (H) JoinControl               | Contextual      | Contextual    |
    |                               | Rule Required   | Rule Required |
    +-------------------------------+-----------------+---------------+
    | (I) OldHangulJamo             | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (J) Unassigned                | Unassigned      | Unassigned    |
    +-------------------------------+-----------------+---------------+
    | (K) ASCII7                    | Valid           | Valid         |
    +-------------------------------+-----------------+---------------+
    | (L) Controls                  | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (M) PrecisIgnorableProperties | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (N) Spaces                    | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (O) Symbols                   | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (P) Punctuation               | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (Q) HasCompat                 | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (R) OtherLetterDigits         | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
        
    +===============================+=================+===============+
    |        CATEGORY               | IDENTIFIERCLASS | FREEFORMCLASS |
    +===============================+=================+===============+
    | (A) LetterDigits              | Valid           | Valid         |
    +-------------------------------+-----------------+---------------+
    | (B) Unstable                  |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (C) IgnorableProperties       |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (D) IgnorableBlocks           |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (E) LDH                       |          [N/A (unused)]         |
    +-------------------------------+-----------------+---------------+
    | (F) Exceptions                | Contextual      | Contextual    |
    |                               | Rule Required   | Rule Required |
    +-------------------------------+-----------------+---------------+
    | (G) BackwardCompatible        |      [Handled by IDNA Rules]    |
    +-------------------------------+-----------------+---------------+
    | (H) JoinControl               | Contextual      | Contextual    |
    |                               | Rule Required   | Rule Required |
    +-------------------------------+-----------------+---------------+
    | (I) OldHangulJamo             | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (J) Unassigned                | Unassigned      | Unassigned    |
    +-------------------------------+-----------------+---------------+
    | (K) ASCII7                    | Valid           | Valid         |
    +-------------------------------+-----------------+---------------+
    | (L) Controls                  | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (M) PrecisIgnorableProperties | Disallowed      | Disallowed    |
    +-------------------------------+-----------------+---------------+
    | (N) Spaces                    | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (O) Symbols                   | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (P) Punctuation               | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (Q) HasCompat                 | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
    | (R) OtherLetterDigits         | Disallowed      | Valid         |
    +-------------------------------+-----------------+---------------+
        

Table 1: Comparative Disposition of Code Points

表1:代码点的比较配置

5. Profiles
5. 轮廓

This framework document defines the valid, contextual rule required, disallowed, and unassigned rules for the IdentifierClass and the FreeformClass. A profile of a PRECIS string class MUST define the width mapping, additional mapping (if any), case mapping, normalization, and directionality rules. A profile MAY also restrict the allowable code points above and beyond the definition of the relevant PRECIS string class (but MUST NOT add as valid any code points that are disallowed by the relevant PRECIS string class). These matters are discussed in the following subsections.

此框架文档为IdentifierClass和FreeformClass定义了有效的、上下文规则必需的、不允许的和未分配的规则。PRECIS字符串类的配置文件必须定义宽度映射、附加映射(如果有)、大小写映射、规范化和方向性规则。配置文件还可以将允许的代码点限制在相关PRECIS字符串类定义之上或之外(但不得将相关PRECIS字符串类不允许的任何代码点添加为有效代码点)。这些问题将在以下小节中讨论。

Profiles of the PRECIS string classes are registered with the IANA as described under Section 11.3. Profile names use the following convention: they are of the form "Profilename of BaseClass", where the "Profilename" string is a differentiator and "BaseClass" is the name of the PRECIS string class being profiled; for example, the profile used for opaque strings such as passwords is the OpaqueString profile of the FreeformClass [RFC8265].

如第11.3节所述,PRECIS字符串类的配置文件在IANA注册。配置文件名称使用以下约定:它们的形式为“Profilename of BaseClass”,其中“Profilename”字符串是一个区分符,“BaseClass”是要配置的PRECIS字符串类的名称;例如,用于密码等不透明字符串的配置文件是FreeformClass[RFC8265]的OpaqueString配置文件。

5.1. Profiles Must Not Be Multiplied beyond Necessity
5.1. 不得在必要的情况下增加配置文件

The risk of profile proliferation is significant because having too many profiles will result in different behavior across various applications, thus violating what is known in user interface design as the "Principle of Least Astonishment".

配置文件扩散的风险是巨大的,因为拥有太多的配置文件将导致不同应用程序的不同行为,从而违反了用户界面设计中所称的“最少惊讶原则”。

Indeed, we already have too many profiles. Ideally, we would have at most two or three profiles. Unfortunately, numerous application protocols exist with their own quirks regarding protocol strings. Domain names, email addresses, instant messaging addresses, chat room names, user nicknames or display names, filenames, authentication identifiers, passwords, and other strings already exist in the wild and need to be supported in existing application protocols such as DNS, SMTP, the Extensible Messaging and Presence Protocol (XMPP), Internet Relay Chat (IRC), NFS, the Internet Small Computer System Interface (iSCSI), the Extensible Authentication Protocol (EAP), and the Simple Authentication and Security Layer (SASL) [RFC4422], among others.

事实上,我们已经有太多的个人资料。理想情况下,我们最多有两到三个配置文件。不幸的是,许多应用程序协议都有自己关于协议字符串的怪癖。域名、电子邮件地址、即时消息地址、聊天室名称、用户昵称或显示名称、文件名、身份验证标识符、密码和其他字符串已存在于野外,需要在现有应用程序协议(如DNS、SMTP、可扩展消息和状态协议(XMPP))中得到支持,Internet中继聊天(IRC)、NFS、Internet小型计算机系统接口(iSCSI)、可扩展身份验证协议(EAP)和简单身份验证和安全层(SASL)[RFC4422]等。

Nevertheless, profiles must not be multiplied beyond necessity.

尽管如此,概要文件不能超出必要性而成倍增加。

To help prevent profile proliferation, this document recommends sensible defaults for the various options offered to profile creators (such as width mapping and Unicode normalization). In addition, the guidelines for designated experts provided under Section 10 are meant to encourage a high level of due diligence regarding new profiles.

为了帮助防止配置文件扩散,本文档建议为配置文件创建者提供的各种选项(如宽度映射和Unicode规范化)提供合理的默认设置。此外,第10节规定的指定专家指南旨在鼓励对新档案进行高水平的尽职调查。

5.2. Rules
5.2. 规则
5.2.1. Width Mapping Rule
5.2.1. 宽度映射规则

The width mapping rule of a profile specifies whether width mapping is performed on a string and how the mapping is done. Typically, such mapping consists of mapping fullwidth and halfwidth code points, i.e., code points with a Decomposition Type of Wide or Narrow, to their decomposition mappings; as an example, "0" (FULLWIDTH DIGIT ZERO, U+FF10) would be mapped to "0" (DIGIT ZERO U+0030).

配置文件的宽度映射规则指定是否对字符串执行宽度映射以及如何执行映射。通常,这种映射包括将全宽和半宽代码点(即分解类型为宽或窄的代码点)映射到它们的分解映射;例如,”0" (全宽数字0,U+FF10)将映射到“0”(数字0 U+0030)。

The normalization form specified by a profile (see below) has an impact on the need for width mapping. Because width mapping is performed as a part of compatibility decomposition, a profile employing either Normalization Form KD (NFKD) or Normalization Form KC (NFKC) does not need to specify width mapping. However, if Unicode Normalization Form C (NFC) is used (as is recommended), then the profile needs to specify whether to apply width mapping; in this case, width mapping is in general RECOMMENDED because allowing fullwidth and halfwidth code points to remain unmapped to their compatibility variants would violate the "Principle of Least Astonishment". For more information about the concept of width in East Asian scripts within Unicode, see Unicode Standard Annex #11 [UAX11].

配置文件(见下文)指定的规范化形式对宽度映射的需要有影响。因为宽度映射是作为兼容性分解的一部分执行的,所以采用规范化形式KD(NFKD)或规范化形式KC(NFKC)的概要文件不需要指定宽度映射。但是,如果使用Unicode规范化形式C(NFC)(推荐使用),则配置文件需要指定是否应用宽度映射;在这种情况下,通常建议使用宽度映射,因为允许全宽和半宽代码点保持未映射到其兼容变体将违反“最小惊讶原则”。有关Unicode中东亚脚本宽度概念的更多信息,请参阅Unicode标准附录#11[UAX11]。

Note: Because the East Asian width property is not guaranteed to be stable by the Unicode Standard (see <http://unicode.org/policies/stability_policy.html> for details), the results of applying a given width mapping rule might not be consistent across different versions of Unicode.

注意:因为Unicode标准不能保证东亚宽度属性是稳定的(请参见<http://unicode.org/policies/stability_policy.html>有关详细信息,在不同版本的Unicode中应用给定宽度映射规则的结果可能不一致。

5.2.2. Additional Mapping Rule
5.2.2. 附加映射规则

The additional mapping rule of a profile specifies whether additional mappings are performed on a string, such as:

配置文件的附加映射规则指定是否对字符串执行附加映射,例如:

o Mapping of delimiter code points (such as '@', ':', '/', '+', and '-').

o 定界符代码点的映射(例如“@”、“:”、“/”、“+”和“-”)。

o Mapping of special code points (e.g., non-ASCII space code points to SPACE (U+0020) or control code points to nothing).

o 特殊代码点的映射(例如,非ASCII空间代码点到空间(U+0020)或控制代码点到零)。

The PRECIS mappings document [RFC7790] describes such mappings in more detail.

PRECIS映射文档[RFC7790]更详细地描述了此类映射。

5.2.3. Case Mapping Rule
5.2.3. 案例映射规则

The case mapping rule of a profile specifies whether case mapping (instead of case preservation) is performed on a string and how the mapping is applied (e.g., mapping uppercase and titlecase code points to their lowercase equivalents).

配置文件的大小写映射规则指定是否对字符串执行大小写映射(而不是保留大小写)以及如何应用映射(例如,将大写和titlecase代码点映射到其小写等效项)。

If case mapping is desired (instead of case preservation), it is RECOMMENDED to use the Unicode toLowerCase() operation defined in the Unicode Standard [Unicode]. In contrast to the Unicode toCaseFold() operation, the toLowerCase() operation is less likely to violate the "Principle of Least Astonishment", especially when an application merely wishes to convert uppercase and titlecase code points to their lowercase equivalents while preserving lowercase code points. Although the toCaseFold() operation can be appropriate when an application needs to compare two strings (such as in search operations), in general few application developers and even fewer users understand its implications, so toLowerCase() is almost always the safer choice.

如果需要大小写映射(而不是保留大小写),建议使用Unicode标准[Unicode]中定义的Unicode toLowerCase()操作。与Unicode toCaseFold()操作相比,toLowerCase()操作不太可能违反“最小惊奇原则”,尤其是当应用程序只希望将大写和标题基代码点转换为小写等价物,同时保留小写代码点时。虽然当应用程序需要比较两个字符串时(例如在搜索操作中),toCaseFold()操作是合适的,但通常很少有应用程序开发人员和更少的用户理解它的含义,因此toLowerCase()几乎总是更安全的选择。

Note: Neither toLowerCase() nor toCaseFold() is designed to handle various language-specific issues, such as the character "ı" (LATIN SMALL LETTER DOTLESS I, U+0131) in several Turkic languages. The reader is referred to the PRECIS mappings document [RFC7790], which describes these issues in greater detail.

注意:toLowerCase()和toCaseFold()都不是为处理各种语言特定问题而设计的,例如几种突厥语中的字符“ı”(拉丁小写字母DOTLESS I,U+0131)。读者可以参考PRECIS映射文档[RFC7790],该文档更详细地描述了这些问题。

In order to maximize entropy and minimize the potential for false accepts, it is NOT RECOMMENDED for application protocols to map uppercase and titlecase code points to their lowercase equivalents when strings conforming to the FreeformClass, or a profile thereof, are used in passwords; instead, it is RECOMMENDED to preserve the case of all code points contained in such strings and then perform case-sensitive comparison. See also the related discussion in Section 12.6 of this document and in [RFC8265].

为了最大化熵并最大限度地减少错误接受的可能性,当密码中使用符合FreeformClass或其配置文件的字符串时,不建议应用程序协议将大写和标题基代码点映射到其小写等价物;相反,建议保留此类字符串中包含的所有代码点的大小写,然后执行区分大小写的比较。另见本文件第12.6节和[RFC8265]中的相关讨论。

5.2.4. Normalization Rule
5.2.4. 规范化规则

The normalization rule of a profile specifies which Unicode Normalization Form (D, KD, C, or KC) is to be applied (see Unicode Standard Annex #15 [UAX15] for background information).

配置文件的规范化规则指定要应用哪种Unicode规范化形式(D、KD、C或KC)(有关背景信息,请参阅Unicode标准附录15[UAX15])。

In accordance with [RFC5198], Normalization Form C (NFC) is RECOMMENDED.

根据[RFC5198],建议使用标准化形式C(NFC)。

Protocol designers and application developers need to understand that certain Unicode normalization forms, especially NFKC and NFKD, can result in significant loss of information in various circumstances and that these circumstances can depend on the language and script of

协议设计人员和应用程序开发人员需要了解,某些Unicode规范化形式,特别是NFKC和NFKD,在各种情况下可能会导致大量信息丢失,并且这些情况可能取决于协议的语言和脚本

the strings to which the normalization forms are applied. Extreme care should be taken when specifying the use of these normalization forms.

应用规范化表单的字符串。在指定这些规范化表单的使用时,应特别小心。

5.2.5. Directionality Rule
5.2.5. 方向性规则

The directionality rule of a profile specifies how to treat strings containing what are often called "right-to-left" (RTL) code points (see Unicode Standard Annex #9 [UAX9]). RTL code points come from scripts that are normally written from right to left and are considered by Unicode to, themselves, have right-to-left directionality. Some strings containing RTL code points also contain "left-to-right" (LTR) code points, such as ASCII numerals, as well as code points without directional properties. Consequently, such strings are known as "bidirectional strings".

配置文件的方向性规则指定如何处理包含通常称为“从右到左”(RTL)代码点的字符串(请参见Unicode标准附录#9[UAX9])。RTL代码点来自通常从右向左编写的脚本,Unicode认为这些脚本本身具有从右向左的方向性。一些包含RTL代码点的字符串还包含“从左到右”(LTR)代码点,例如ASCII数字,以及没有方向属性的代码点。因此,这种字符串被称为“双向字符串”。

Presenting bidirectional strings in different layout systems (e.g., a user interface that is configured to handle primarily an RTL script vs. an interface that is configured to handle primarily an LTR script) can yield display results that, while predictable to those who understand the display rules, are counterintuitive to casual users. In particular, the same bidirectional string (in PRECIS terms) might not be presented in the same way to users of those different layout systems, even though the presentation is consistent within any particular layout system. In some applications, these presentation differences might be considered problematic and thus the application designers might wish to restrict the use of bidirectional strings by specifying a directionality rule. In other applications, these presentation differences might not be considered problematic (this especially tends to be true of more "free-form" strings) and thus no directionality rule is needed.

在不同的布局系统中呈现双向字符串(例如,配置为主要处理RTL脚本的用户界面与配置为主要处理LTR脚本的界面)可以产生显示结果,这些结果虽然对理解显示规则的人来说是可预测的,但对普通用户来说是违反直觉的。特别是,相同的双向字符串(精确地说)可能不会以相同的方式呈现给那些不同布局系统的用户,即使呈现在任何特定布局系统中是一致的。在某些应用程序中,这些表示差异可能被认为是有问题的,因此应用程序设计者可能希望通过指定方向性规则来限制双向字符串的使用。在其他应用程序中,这些表示差异可能不会被认为是有问题的(对于更多的“自由形式”字符串来说,这一点尤其适用),因此不需要方向性规则。

The PRECIS framework does not directly address how to deal with bidirectional strings across all string classes and profiles nor does it define any new directionality rules, because at present there is no widely accepted and implemented solution for the safe display of arbitrary bidirectional strings beyond the Unicode bidirectional algorithm [UAX9]. Although rules for management and display of bidirectional strings have been defined for domain name labels and similar identifiers through the "Bidi Rule" specified in the IDNA2008 specification on right-to-left scripts [RFC5893], those rules are quite restrictive and are not necessarily applicable to all bidirectional strings.

PRECIS框架没有直接解决如何跨所有字符串类和配置文件处理双向字符串的问题,也没有定义任何新的方向性规则,因为除了Unicode双向算法之外,目前还没有广泛接受和实现的安全显示任意双向字符串的解决方案[UAX9]。尽管已通过IDNA2008规范中关于从右到左脚本[RFC5893]中指定的“Bidi规则”为域名标签和类似标识符定义了双向字符串的管理和显示规则,但这些规则限制性很大,不一定适用于所有双向字符串。

The authors of a PRECIS profile might believe that they need to define a new directionality rule of their own. Because of the complexity of the issues involved, such a belief is almost always misguided, even if the authors have done a great deal of careful

PRECIS剖面图的作者可能认为他们需要定义自己的新方向性规则。由于所涉及问题的复杂性,这种信念几乎总是被误导的,即使作者做了大量的仔细研究

research into the challenges of displaying bidirectional strings. This document strongly suggests that profile authors who are thinking about defining a new directionality rule should think again and instead consider using the "Bidi Rule" [RFC5893] (for profiles based on the IdentifierClass) or following the Unicode bidirectional algorithm [UAX9] (for profiles based on the FreeformClass or in situations where the IdentifierClass is not appropriate).

研究显示双向字符串的挑战。该文档强烈建议,正在考虑定义新的方向性规则的配置文件作者应该重新考虑,而应考虑使用“BiDi规则”[RCF5893](基于IdIdIrror类的配置文件)或遵循Unicode双向算法[UAX9]。(对于基于FreeformClass的概要文件,或在IdentifierClass不合适的情况下)。

5.3. A Note about Spaces
5.3. 关于空间的注记

With regard to the IdentifierClass, the consensus of the PRECIS Working Group was that spaces are problematic for many reasons, including the following:

关于标识类,PRECIS工作组的共识是,空间存在问题的原因有很多,包括:

o Many Unicode code points are confusable with SPACE (U+0020).

o 许多Unicode代码点可与空格(U+0020)混淆。

o Even if non-ASCII space code points are mapped to SPACE (U+0020), space code points are often not rendered in user interfaces, leading to the possibility that a human user might consider a string containing spaces to be equivalent to the same string without spaces.

o 即使非ASCII空间代码点映射到空间(U+ 0020),空间代码点通常不呈现在用户界面中,从而导致人类用户可能考虑包含空间的字符串等价于没有空格的相同字符串。

o In some locales, some devices are known to generate a code point other than SPACE (U+0020), such as ZERO WIDTH JOINER (U+200D), when a user performs an action like pressing the space bar on a keyboard.

o 在某些地区,当用户执行诸如按下键盘上的空格键之类的操作时,已知某些设备会生成除空格(U+0020)以外的代码点,例如零宽度JOINER(U+200D)。

One consequence of disallowing space code points in the IdentifierClass might be to effectively discourage their use within identifiers created in newer application protocols; given the challenges involved with properly handling space code points (especially non-ASCII space code points) in identifiers and other protocol strings, the PRECIS Working Group considered this to be a feature, not a bug.

在IdentifierClass中不允许空间码点的一个后果可能是有效地阻止在较新的应用程序协议中创建的标识符中使用空间码点;考虑到正确处理标识符和其他协议字符串中的空间码点(特别是非ASCII空间码点)所面临的挑战,PRECIS工作组认为这是一个功能,而不是一个bug。

However, the FreeformClass does allow spaces; this in turn enables application protocols to define profiles of the FreeformClass that are more flexible than any profiles of the IdentifierClass. In addition, as explained in Section 6.3, application protocols can also define application-layer constructs containing spaces.

但是,FreeformClass允许空格;这反过来使应用程序协议能够定义FreeformClass的配置文件,这些配置文件比IdentifierClass的任何配置文件都更灵活。此外,如第6.3节所述,应用程序协议还可以定义包含空间的应用程序层结构。

6. Applications
6. 应用
6.1. How to Use PRECIS in Applications
6.1. 如何在应用程序中使用PRECIS

Although PRECIS has been designed with applications in mind, internationalization is not suddenly made easy through the use of PRECIS. Indeed, because it is extremely difficult for protocol

尽管PRECIS的设计考虑到了应用程序,但国际化并不是通过使用PRECIS突然变得容易。事实上,因为这是非常困难的协议

designers and application developers to do the right thing for all users when supporting internationalized strings, often the safest option is to support only the ASCII range [RFC20] in various protocol slots. This state of affairs is unfortunate but is the direct result of the complexities involved with human languages (e.g., the vast number of code points, scripts, user communities, and rules with their inevitable exceptions), which kinds of strings application developers and their users wish to support, the wide range of devices that users employ to access services enabled by various Internet protocols, and so on.

设计师和应用程序开发人员在支持国际化字符串时为所有用户做正确的事情,通常最安全的选择是只支持各种协议插槽中的ASCII范围[RFC20]。这种情况很不幸,但却是人类语言复杂性的直接结果(例如,大量代码点、脚本、用户社区和规则及其不可避免的例外),应用程序开发人员及其用户希望支持的字符串,用户用来访问各种Internet协议支持的服务的各种设备,等等。

Despite these significant challenges, application and protocol developers sometimes persevere in attempting to support internationalized strings in their systems. These developers need to think carefully about how they will use the PRECIS string classes, or profiles thereof, in their applications. This section provides some guidelines to application developers (and to expert reviewers of application-protocol specifications).

尽管存在这些重大挑战,应用程序和协议开发人员有时仍坚持尝试在其系统中支持国际化字符串。这些开发人员需要仔细考虑如何在应用程序中使用PRECIS字符串类或其概要文件。本节为应用程序开发人员(以及应用程序协议规范的专家评审人员)提供了一些指南。

o Don't define your own profile unless absolutely necessary (see Section 5.1). Existing profiles have been designed for wide reuse. It is highly likely that an existing profile will meet your needs, especially given the ability to specify further excluded code points (Section 6.2) and to build application-layer constructs (see Section 6.3).

o 除非绝对必要,否则不要定义自己的配置文件(参见第5.1节)。现有的配置文件已设计为可广泛重用。现有概要文件很可能满足您的需求,特别是考虑到能够指定进一步排除的代码点(第6.2节)和构建应用程序层构造(见第6.3节)。

o Do specify:

o 请说明:

* Exactly which entities are responsible for preparation, enforcement, and comparison of internationalized strings (e.g., servers or clients).

* 具体哪些实体负责准备、实施和比较国际化字符串(例如,服务器或客户端)。

* Exactly when those entities need to complete their tasks (e.g., a server might need to enforce the rules of a profile before allowing a client to gain network access).

* 这些实体需要完成其任务的确切时间(例如,在允许客户端获得网络访问之前,服务器可能需要强制执行配置文件的规则)。

* Exactly which protocol slots need to be checked against which profiles (e.g., checking the address of a message's intended recipient against the UsernameCaseMapped profile [RFC8265] of the IdentifierClass or checking the password of a user against the OpaqueString profile [RFC8265] of the FreeformClass).

* 确切地说,需要根据哪些配置文件检查哪些协议插槽(例如,根据IdentifierClass的UsernameCaseMapped配置文件[RFC8265]检查消息的预期收件人的地址,或根据FreeformClass的OpaqueString配置文件[RFC8265]检查用户的密码)。

See [RFC8265] and [RFC7622] for definitions of these matters for several applications.

请参见[RFC8265]和[RFC7622]了解多个应用中这些事项的定义。

6.2. Further Excluded Characters
6.2. 进一步排除的字符

An application protocol that uses a profile MAY specify particular code points that are not allowed in relevant slots within that application protocol, above and beyond those excluded by the string class or profile.

使用概要文件的应用程序协议可以指定特定的代码点,这些代码点不允许出现在该应用程序协议内的相关插槽中,超出字符串类或概要文件排除的代码点。

That is, an application protocol MAY do either of the following:

也就是说,应用协议可以执行以下任一操作:

1. Exclude specific code points that are allowed by the relevant string class.

1. 排除相关字符串类允许的特定代码点。

2. Exclude code points matching certain Unicode properties (e.g., math symbols) that are included in the relevant PRECIS string class.

2. 排除与相关PRECIS字符串类中包含的某些Unicode属性(例如,数学符号)匹配的代码点。

As a result of such exclusions, code points that are defined as valid for the PRECIS string class or profile will be defined as disallowed for the relevant protocol slot.

由于此类排除,定义为对PRECIS字符串类或配置文件有效的代码点将被定义为不允许用于相关协议插槽。

Typically, such exclusions are defined for the purpose of backward compatibility with legacy formats within an application protocol. These are defined for application protocols, not profiles, in order to prevent multiplication of profiles beyond necessity (see Section 5.1).

通常,定义此类排除是为了与应用程序协议中的遗留格式向后兼容。这些是针对应用协议而不是概要文件定义的,以防止概要文件的倍增超出必要范围(见第5.1节)。

6.3. Building Application-Layer Constructs
6.3. 构建应用层构造

Sometimes, an application-layer construct does not map in a straightforward manner to one of the PRECIS string classes or a profile thereof. Consider, for example, the "simple username" construct in SASL [RFC4422]. Depending on the deployment, a simple username might take the form of a user's full name (e.g., the user's personal name followed by a space and then the user's family name). Such a simple username cannot be defined as an instance of the IdentifierClass or a profile thereof, because space code points are not allowed in the IdentifierClass; however, it could be defined using a space-separated sequence of IdentifierClass instances, as in the following ABNF [RFC5234] from [RFC8265]:

有时,应用层构造不会以直接的方式映射到PRECIS字符串类或其概要文件之一。例如,考虑SASL[RCF422]中的“简单用户名”构造。根据部署的不同,简单用户名可能采用用户全名的形式(例如,用户的个人名称后跟空格,然后是用户的姓氏)。这种简单的用户名不能定义为IdentifierClass的实例或其配置文件,因为IdentifierClass中不允许使用空格代码点;但是,可以使用空间分隔的IdentifierClass实例序列来定义它,如以下[RFC8265]中的ABNF[RFC5234]所示:

      username   = userpart *(1*SP userpart)
      userpart   = 1*(idpoint)
                   ;
                   ; an "idpoint" is a Unicode code point that
                   ; can be contained in a string conforming to
                   ; the PRECIS IdentifierClass
                   ;
        
      username   = userpart *(1*SP userpart)
      userpart   = 1*(idpoint)
                   ;
                   ; an "idpoint" is a Unicode code point that
                   ; can be contained in a string conforming to
                   ; the PRECIS IdentifierClass
                   ;
        

Similar techniques could be used to define many application-layer constructs, say of the form "user@domain" or "/path/to/file".

类似的技术可用于定义许多应用层结构,例如表单“user@domain“或“/path/to/file”。

7. Order of Operations
7. 操作顺序

To ensure proper comparison, the rules specified for a particular string class or profile MUST be applied in the following order:

为确保正确比较,必须按以下顺序应用为特定字符串类或配置文件指定的规则:

1. Width Mapping Rule

1. 宽度映射规则

2. Additional Mapping Rule

2. 附加映射规则

3. Case Mapping Rule

3. 案例映射规则

4. Normalization Rule

4. 规范化规则

5. Directionality Rule

5. 方向性规则

6. Behavioral rules for determining whether a code point is valid, allowed under a contextual rule, disallowed, or unassigned

6. 用于确定代码点是否有效、上下文规则允许、不允许或未指定的行为规则

As already described, the width mapping, additional mapping, case mapping, normalization, and directionality rules are specified for each profile, whereas the behavioral rules are specified for each string class. Some of the logic behind this order is provided under Section 5.2.1 (see also the PRECIS mappings document [RFC7790]). In addition, this order is consistent with IDNA2008, and with both IDNA2003 and Stringprep before then, for the purpose of enabling code reuse and of ensuring as much continuity as possible with the Stringprep profiles that are obsoleted by several PRECIS profiles.

如前所述,为每个概要文件指定了宽度映射、附加映射、大小写映射、规范化和方向性规则,而为每个字符串类指定了行为规则。第5.2.1节提供了该订单背后的一些逻辑(另请参见PRECIS映射文件[RFC7790])。此外,该顺序与IDNA2008以及之前的IDNA2003和Stringprep一致,以实现代码重用,并确保与多个PRECIS配置文件淘汰的Stringprep配置文件尽可能多的连续性。

Because of the order of operations specified here, applying the rules for any given PRECIS profile is not necessarily an idempotent procedure (e.g., under certain circumstances, such as when Unicode Normalization Form KC is used, performing Unicode normalization after case mapping can still yield uppercase characters for certain code points). Therefore, an implementation SHOULD apply the rules repeatedly until the output string is stable; if the output string does not stabilize after reapplying the rules three (3) additional times after the first application, the implementation SHOULD terminate application of the rules and reject the input string as invalid.

由于此处指定的操作顺序,应用任何给定PRECIS配置文件的规则不一定是幂等过程(例如,在某些情况下,例如使用Unicode规范化表单KC时,在大小写映射后执行Unicode规范化仍然可以为某些代码点生成大写字符)。因此,实现应该重复应用规则,直到输出字符串稳定为止;如果输出字符串在第一次应用后再次应用规则三(3)次后不稳定,则实现应终止规则的应用,并将输入字符串视为无效而拒绝。

8. Code Point Properties
8. 代码点属性

In order to implement the string classes described above, this document does the following:

为了实现上述字符串类,本文档执行以下操作:

1. Reviews and classifies the collections of code points in the Unicode coded character set by examining various code point properties.

1. 通过检查各种代码点属性,查看Unicode编码字符集中的代码点集合并对其进行分类。

2. Defines an algorithm for determining a derived property value, which can depend on the string class being used by the relevant application protocol.

2. 定义用于确定派生属性值的算法,派生属性值取决于相关应用程序协议使用的字符串类。

This document is not intended to specify precisely how derived property values are to be applied in protocol strings. That information is the responsibility of the protocol specification that uses or profiles a PRECIS string class from this document. The value of the property is to be interpreted as follows.

本文档不打算精确地指定如何在协议字符串中应用派生属性值。该信息由使用或分析本文档中PRECIS字符串类的协议规范负责。该财产的价值应解释如下。

PROTOCOL VALID Those code points that are allowed to be used in any PRECIS string class (currently, IdentifierClass and FreeformClass). The abbreviated term "PVALID" is used to refer to this value in the remainder of this document.

协议有效允许在任何PRECIS字符串类(当前为IdentifierClass和FreeformClass)中使用的代码点。在本文件的其余部分中,缩写术语“PVALID”用于指代该值。

   SPECIFIC CLASS PROTOCOL VALID  Those code points that are allowed to
      be used in specific string classes.  In the remainder of this
      document, the abbreviated term *_PVAL is used, where * = (ID |
      FREE), i.e., either "FREE_PVAL" for the FreeformClass or "ID_PVAL"
      for the IdentifierClass.  In practice, the derived property
      ID_PVAL is not used in this specification, because every ID_PVAL
      code point is PVALID.
        
   SPECIFIC CLASS PROTOCOL VALID  Those code points that are allowed to
      be used in specific string classes.  In the remainder of this
      document, the abbreviated term *_PVAL is used, where * = (ID |
      FREE), i.e., either "FREE_PVAL" for the FreeformClass or "ID_PVAL"
      for the IdentifierClass.  In practice, the derived property
      ID_PVAL is not used in this specification, because every ID_PVAL
      code point is PVALID.
        

CONTEXTUAL RULE REQUIRED Some characteristics of the code point, such as its being invisible in certain contexts or problematic in others, require that it not be used in a string unless specific other code points or properties are present in the string. As in IDNA2008, there are two subdivisions of CONTEXTUAL RULE REQUIRED: the first for Join_controls (called "CONTEXTJ") and the second for other code points (called "CONTEXTO"). A string MUST NOT contain any characters whose validity is context-dependent, unless the validity is positively confirmed by a contextual rule. To check this, each code point identified as CONTEXTJ or CONTEXTO in the "PRECIS Derived Property Value" registry (Section 11.1) MUST have a non-null rule. If such a code point is missing a rule, the string is invalid. If the rule exists but the result of applying the rule is negative or inconclusive, the proposed string is invalid. The most notable of the CONTEXTUAL RULE REQUIRED code points are the Join Control code points ZERO WIDTH JOINER (U+200D) and ZERO WIDTH NON-JOINER (U+200C), which have a derived property value of CONTEXTJ. See Appendix A of [RFC5892] for more information.

上下文规则要求代码点具有某些特征,例如在某些上下文中不可见或在其他上下文中有问题,因此,除非字符串中存在特定的其他代码点或属性,否则不能在字符串中使用该规则。在IDNA2008中,需要两个上下文规则细分:第一个用于连接_控件(称为“CONTEXTJ”),第二个用于其他代码点(称为“CONTEXTO”)。字符串不得包含有效性依赖于上下文的任何字符,除非上下文规则明确确认了有效性。要检查这一点,在“PRECIS派生属性值”注册表(第11.1节)中标识为CONTEXTJ或CONTEXTO的每个代码点必须具有非空规则。如果这样的代码点缺少规则,则该字符串无效。如果规则存在,但应用规则的结果为否定或不确定,则建议的字符串无效。最值得注意的上下文规则所需的代码点是连接控制代码点ZERO WIDTH JOINER(U+200D)和ZERO WIDTH NON-JOINER(U+200C),它们的派生属性值为CONTEXTJ。有关更多信息,请参见[RFC5892]的附录A。

DISALLOWED Those code points that are not permitted in any PRECIS string class.

不允许任何PRECIS字符串类中不允许的代码点。

   SPECIFIC CLASS DISALLOWED  Those code points that are not to be
      included in one of the string classes but that might be permitted
      in others.  In the remainder of this document, the abbreviated
      term *_DIS is used, where * = (ID | FREE), i.e., either "FREE_DIS"
      for the FreeformClass or "ID_DIS" for the IdentifierClass.  In
      practice, the derived property FREE_DIS is not used in this
      specification, because every FREE_DIS code point is DISALLOWED.
        
   SPECIFIC CLASS DISALLOWED  Those code points that are not to be
      included in one of the string classes but that might be permitted
      in others.  In the remainder of this document, the abbreviated
      term *_DIS is used, where * = (ID | FREE), i.e., either "FREE_DIS"
      for the FreeformClass or "ID_DIS" for the IdentifierClass.  In
      practice, the derived property FREE_DIS is not used in this
      specification, because every FREE_DIS code point is DISALLOWED.
        

UNASSIGNED Those code points that are not designated (i.e., are unassigned) in the Unicode Standard.

未指定在Unicode标准中未指定(即未指定)的代码点。

The algorithm to calculate the value of the derived property is as follows (implementations MUST NOT modify the order of operations within this algorithm, because doing so would cause inconsistent results across implementations):

计算派生属性值的算法如下(实现不得修改此算法中的操作顺序,因为这样做会导致实现之间的结果不一致):

   If .cp. .in. Exceptions Then Exceptions(cp);
   Else If .cp. .in. BackwardCompatible Then BackwardCompatible(cp);
   Else If .cp. .in. Unassigned Then UNASSIGNED;
   Else If .cp. .in. ASCII7 Then PVALID;
   Else If .cp. .in. JoinControl Then CONTEXTJ;
   Else If .cp. .in. OldHangulJamo Then DISALLOWED;
   Else If .cp. .in. PrecisIgnorableProperties Then DISALLOWED;
   Else If .cp. .in. Controls Then DISALLOWED;
   Else If .cp. .in. HasCompat Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. LetterDigits Then PVALID;
   Else If .cp. .in. OtherLetterDigits Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Spaces Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Symbols Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Punctuation Then ID_DIS or FREE_PVAL;
   Else DISALLOWED;
        
   If .cp. .in. Exceptions Then Exceptions(cp);
   Else If .cp. .in. BackwardCompatible Then BackwardCompatible(cp);
   Else If .cp. .in. Unassigned Then UNASSIGNED;
   Else If .cp. .in. ASCII7 Then PVALID;
   Else If .cp. .in. JoinControl Then CONTEXTJ;
   Else If .cp. .in. OldHangulJamo Then DISALLOWED;
   Else If .cp. .in. PrecisIgnorableProperties Then DISALLOWED;
   Else If .cp. .in. Controls Then DISALLOWED;
   Else If .cp. .in. HasCompat Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. LetterDigits Then PVALID;
   Else If .cp. .in. OtherLetterDigits Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Spaces Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Symbols Then ID_DIS or FREE_PVAL;
   Else If .cp. .in. Punctuation Then ID_DIS or FREE_PVAL;
   Else DISALLOWED;
        

The value of the derived property calculated can depend on the string class; for example, if an identifier used in an application protocol is defined as profiling the PRECIS IdentifierClass then a space character such as SPACE (U+0020) would be assigned to ID_DIS, whereas if an identifier is defined as profiling the PRECIS FreeformClass then the character would be assigned to FREE_PVAL. For the sake of brevity, the designation "FREE_PVAL" is used herein, instead of the longer designation "ID_DIS or FREE_PVAL". In practice, the derived properties ID_PVAL and FREE_DIS are not used in this specification, because every ID_PVAL code point is PVALID and every FREE_DIS code point is DISALLOWED.

计算的派生属性的值可以取决于string类;例如,如果应用程序协议中使用的标识符定义为评测PRECIS IdentifierClass,则空格(U+0020)等空格字符将分配给ID_DIS,而如果标识符定义为评测PRECIS FreeformClass,则该字符将分配给FREE_PVAL。为简洁起见,此处使用名称“FREE_PVAL”,而不是较长的名称“ID_DIS或FREE_PVAL”。实际上,本规范中未使用派生属性ID_PVAL和FREE_DIS,因为每个ID_PVAL代码点都是PVALID,而每个FREE_DIS代码点都是不允许的。

Use of the name of a rule (such as "Exceptions") implies the set of code points that the rule defines, whereas the same name as a function call (such as "Exceptions(cp)") implies the value that the code point has in the Exceptions table.

使用规则名称(如“Exceptions”)意味着规则定义的代码点集,而与函数调用相同的名称(如“Exceptions(cp)”)则意味着代码点在Exceptions表中的值。

The mechanisms described here allow determination of the value of the property for future versions of Unicode (including code points added after Unicode 5.2 or 7.0, depending on the category, because some categories mentioned in this document are simply pointers to IDNA2008 and therefore were defined at the time of Unicode 5.2). Changes in Unicode properties that do not affect the outcome of this process therefore do not affect this framework. For example, a code point can have its Unicode General_Category value change from So to Sm, or from Lo to Ll, without affecting the algorithm results. Moreover, even if such changes were to result, the BackwardCompatible list (Section 9.7) can be adjusted to ensure the stability of the results.

此处描述的机制允许确定未来Unicode版本的属性值(包括Unicode 5.2或7.0之后添加的代码点,具体取决于类别,因为本文档中提到的某些类别只是指向IDNA2008的指针,因此在Unicode 5.2时定义)。因此,Unicode属性中不会影响此过程结果的更改不会影响此框架。例如,代码点的Unicode General_类别值可以从So更改为Sm,或从Lo更改为Ll,而不会影响算法结果。此外,即使会产生此类变化,也可以调整后向兼容列表(第9.7节),以确保结果的稳定性。

9. Category Definitions Used to Calculate Derived Property
9. 用于计算派生特性的类别定义

The derived property obtains its value based on a two-step procedure:

派生属性基于两步过程获取其值:

1. Code points are placed in one or more character categories either (1) based on core properties defined by the Unicode Standard or (2) by treating the code point as an exception and addressing the code point based on its code point value. These categories are not mutually exclusive.

1. 代码点被放置在一个或多个字符类别中,(1)基于Unicode标准定义的核心属性,或(2)通过将代码点视为例外并基于其代码点值寻址代码点。这些类别并非相互排斥。

2. Set operations are used with these categories to determine the values for a property specific to a given string class. These operations are specified under Section 8.

2. 集合操作与这些类别一起使用,以确定特定于给定字符串类的属性的值。第8节规定了这些操作。

Note: Unicode property names and property value names might have short abbreviations, such as "gc" for the General_Category property and "Ll" for the Lowercase_Letter property value of the gc property.

注意:Unicode属性名称和属性值名称可能有简短的缩写,例如“gc”表示常规类别属性,而“Ll”表示gc属性的小写字母属性值。

In the following specification of character categories, the operation that returns the value of a particular Unicode code point property for a code point is designated by using the formal name of that property (from the Unicode PropertyAliases.txt file [PropertyAliases] followed by "(cp)" for "code point". For example, the value of the General_Category property for a code point is indicated by General_Category(cp).

在下面的字符类别规范中,返回代码点的特定Unicode代码点属性值的操作是通过使用该属性的正式名称来指定的(从Unicode PropertyAliases.txt文件[PropertyAliases]中,后跟表示“代码点”的“(cp)”。例如,代码点的General_Category属性的值由General_Category(cp)表示。

The first ten categories (A-J) shown below were previously defined for IDNA2008 and are referenced from [RFC5892] to ease the understanding of how PRECIS handles various code points. Some of these categories are reused in PRECIS, and some of them are not;

下面所示的前十个类别(A-J)先前是为IDNA2008定义的,参考[RFC5892],以便于理解PRECIS如何处理各种代码点。这些类别中的一些在PRECIS中重用,而另一些则没有;

however, the lettering of categories is retained to prevent overlap and to ease implementation of both IDNA2008 and PRECIS in a single software application. The next eight categories (K-R) are specific to PRECIS.

但是,保留类别的字母,以防止重叠,并简化IDNA2008和PRECIS在单个软件应用程序中的实现。接下来的八个类别(K-R)是PRECIS特有的。

9.1. LetterDigits (A)
9.1. 字母数字(A)

This category is defined in Section 2.1 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]的第2.1节中定义,并通过引用包含在PRECIS中使用。

9.2. Unstable (B)
9.2. 不稳定(B)

This category is defined in Section 2.2 of [RFC5892]. However, it is not used in PRECIS.

该类别在[RFC5892]第2.2节中定义。但是,PRECIS中未使用此选项。

9.3. IgnorableProperties (C)
9.3. 可忽略属性(C)

This category is defined in Section 2.3 of [RFC5892]. However, it is not used in PRECIS.

该类别在[RFC5892]第2.3节中定义。但是,PRECIS中未使用此选项。

Note: See the PrecisIgnorableProperties ("M") category below for a more inclusive category used in PRECIS identifiers.

注:请参见下面的PrecisionOrableProperties(“M”)类别,了解PRECIS标识符中使用的更具包容性的类别。

9.4. IgnorableBlocks (D)
9.4. 可忽略块(D)

This category is defined in Section 2.4 of [RFC5892]. However, it is not used in PRECIS.

该类别在[RFC5892]第2.4节中定义。但是,PRECIS中未使用此选项。

9.5. LDH (E)
9.5. 乳酸脱氢酶(E)

This category is defined in Section 2.5 of [RFC5892]. However, it is not used in PRECIS.

该类别在[RFC5892]第2.5节中定义。但是,PRECIS中未使用此选项。

Note: See the ASCII7 ("K") category below for a more inclusive category used in PRECIS identifiers.

注:有关PRECIS标识符中使用的更具包容性的类别,请参见下面的ASCII7(“K”)类别。

9.6. Exceptions (F)
9.6. 例外情况(F)

This category is defined in Section 2.6 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]的第2.6节中定义,并通过引用包含在PRECIS中使用。

9.7. BackwardCompatible (G)
9.7. 向后兼容(G)

This category is defined in Section 2.7 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]第2.7节中有定义,并通过引用包含在PRECIS中使用。

Note: Management of this category is handled via the processes specified in [RFC5892]. At the time of this writing (and also at the

注:此类管理通过[RFC5892]中规定的流程进行处理。在撰写本文时(以及

time that RFC 5892 was published), this category consisted of the empty set; however, that is subject to change as described in RFC 5892.

RFC 5892发布的时间),该类别由空集组成;但是,如RFC 5892所述,这可能会发生变化。

9.8. JoinControl (H)
9.8. 联合控制(H)

This category is defined in Section 2.8 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]的第2.8节中定义,并通过引用包含在PRECIS中使用。

Note: In particular, the code points ZERO WIDTH JOINER (U+200D) and ZERO WIDTH NON-JOINER (U+200C) are necessary to produce certain combinations of characters in certain scripts (e.g., Arabic, Persian, and Indic scripts), but if used in other contexts, they can have consequences that violate the "Principle of Least Astonishment". Therefore, these code points are allowed only in contexts where they are appropriate, specifically where the relevant rule (CONTEXTJ or CONTEXTO) has been defined. See [RFC5892] and [RFC5894] for further discussion.

注意:特别是,代码点零宽度连接符(U+200D)和零宽度非连接符(U+200C)对于在某些脚本(例如阿拉伯语、波斯语和印度语脚本)中生成某些字符组合是必要的,但如果在其他上下文中使用,它们可能会产生违反“最小惊讶原则”的后果。因此,这些代码点只允许在适当的上下文中使用,特别是在定义了相关规则(CONTEXTJ或CONTEXTO)的上下文中使用。有关进一步的讨论,请参见[RFC5892]和[RFC5894]。

9.9. OldHangulJamo (I)
9.9. OldHangulJamo(一)

This category is defined in Section 2.9 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]的第2.9节中定义,并通过引用包含在PRECIS中使用。

Note: Exclusion of these code points results in disallowing certain archaic Korean syllables and in restricting supported Korean syllables to preformed, modern Hangul characters.

注:排除这些代码点会导致不允许使用某些古代韩国语音节,并将支持的韩国语音节限制为预制的现代韩国语字符。

9.10. Unassigned (J)
9.10. 未分配(J)

This category is defined in Section 2.10 of [RFC5892] and is included by reference for use in PRECIS.

该类别在[RFC5892]的第2.10节中定义,并通过引用包含在PRECIS中使用。

9.11. ASCII7 (K)
9.11. ASCII7(K)

This PRECIS-specific category consists of all printable, non-space code points from the 7-bit ASCII range. By applying this category, the algorithm specified under Section 8 exempts these code points from other rules that might be applied during PRECIS processing, on the assumption that these code points are in such wide use that disallowing them would be counterproductive.

该PRECIS特定类别由7位ASCII范围内的所有可打印非空间代码点组成。通过应用这一类别,第8节规定的算法将这些代码点从PRECIS处理过程中可能应用的其他规则中豁免,前提是这些代码点的使用范围如此广泛,如果不允许这些代码点将产生反作用。

   K: cp is in {0021..007E}
        
   K: cp is in {0021..007E}
        
9.12. Controls (L)
9.12. 控制(L)

This PRECIS-specific category consists of all control code points, such as LINE FEED (U+000A).

该PRECIS特定类别由所有控制代码点组成,如换行符(U+000A)。

   L: Control(cp) = True
        
   L: Control(cp) = True
        
9.13. PrecisIgnorableProperties (M)
9.13. 可沉淀性(M)

This PRECIS-specific category is used to group code points that are discouraged from use in PRECIS string classes.

此PRECIS特定类别用于对不建议在PRECIS字符串类中使用的代码点进行分组。

   M: Default_Ignorable_Code_Point(cp) = True or
      Noncharacter_Code_Point(cp) = True
        
   M: Default_Ignorable_Code_Point(cp) = True or
      Noncharacter_Code_Point(cp) = True
        

The definition for Default_Ignorable_Code_Point can be found in the DerivedCoreProperties.txt file [DerivedCoreProperties].

可在DerivedCoreProperties.txt文件[DerivedCoreProperties]中找到默认可忽略代码点的定义。

Note: In general, these code points are constructs such as so-called "soft hyphens", certain joining code points, various specialized code points for use within Unicode itself (e.g., language tags and variation selectors), and so on. Disallowing these code points in PRECIS reduces the potential for unexpected results in the use of internationalized strings.

注意:通常,这些代码点是一些构造,例如所谓的“软连字符”、某些连接代码点、Unicode本身使用的各种专用代码点(例如,语言标记和变体选择器),等等。在PRECIS中禁用这些代码点可以减少使用国际化字符串时出现意外结果的可能性。

9.14. Spaces (N)
9.14. 空格(N)

This PRECIS-specific category is used to group code points that are spaces.

此PRECIS特定类别用于对作为空格的代码点进行分组。

   N: General_Category(cp) is in {Zs}
        
   N: General_Category(cp) is in {Zs}
        
9.15. Symbols (O)
9.15. 符号(O)

This PRECIS-specific category is used to group code points that are symbols.

此PRECIS特定类别用于对作为符号的代码点进行分组。

   O: General_Category(cp) is in {Sm, Sc, Sk, So}
        
   O: General_Category(cp) is in {Sm, Sc, Sk, So}
        
9.16. Punctuation (P)
9.16. 标点符号(P)

This PRECIS-specific category is used to group code points that are punctuation.

此PRECIS特定类别用于对标点符号的代码点进行分组。

   P: General_Category(cp) is in {Pc, Pd, Ps, Pe, Pi, Pf, Po}
        
   P: General_Category(cp) is in {Pc, Pd, Ps, Pe, Pi, Pf, Po}
        
9.17. HasCompat (Q)
9.17. HasCompat(Q)

This PRECIS-specific category is used to group any code point that is decomposed and recomposed into something other than itself under Unicode Normalization Form KC.

此PRECIS特定类别用于将任何代码点分组,这些代码点在Unicode规范化表单KC下分解并重新组合为自身以外的内容。

   Q: toNFKC(cp) != cp
        
   Q: toNFKC(cp) != cp
        

Typically, this category is true of code points that are "compatibility decomposable characters" as defined in the Unicode Standard.

通常,对于Unicode标准中定义的“兼容性可分解字符”的代码点,这一类别是正确的。

The toNFKC() operation returns the code point in Normalization Form KC. For more information, see Unicode Standard Annex #15 [UAX15].

操作以规范化形式KC返回代码点。有关更多信息,请参阅Unicode标准附录#15[UAX15]。

9.18. OtherLetterDigits (R)
9.18. 其他字母数字(R)

This PRECIS-specific category is used to group code points that are letters and digits other than the "traditional" letters and digits grouped under the LetterDigits ("A") category (see Section 9.1).

该PRECIS特定类别用于对字母和数字的代码点进行分组,而非字母数字(“A”)类别下分组的“传统”字母和数字(见第9.1节)。

   R: General_Category(cp) is in {Lt, Nl, No, Me}
        
   R: General_Category(cp) is in {Lt, Nl, No, Me}
        
10. Guidelines for Designated Experts
10. 指定专家指南

Experience with internationalization in application protocols has shown that protocol designers and application developers usually do not understand the subtleties and trade-offs involved with internationalization and that they need considerable guidance in making reasonable decisions with regard to the options before them.

应用程序协议国际化的经验表明,协议设计人员和应用程序开发人员通常不了解国际化所涉及的微妙之处和权衡,他们需要大量的指导,以便就摆在他们面前的选项做出合理的决策。

Therefore:

因此:

o Protocol designers are strongly encouraged to question the assumption that they need to define new profiles, because existing profiles are designed for wide reuse (see Section 5 for further discussion).

o 强烈鼓励协议设计者质疑他们需要定义新概要文件的假设,因为现有概要文件是为广泛重用而设计的(更多讨论请参见第5节)。

o Those who persist in defining new profiles are strongly encouraged to clearly explain a strong justification for doing so and to publish a stable specification that provides all of the information described under Section 11.3.

o 强烈鼓励坚持定义新概要文件的人明确解释这样做的充分理由,并发布稳定的规范,提供第11.3节所述的所有信息。

o The designated experts for profile registration requests ought to seek answers to all of the questions provided under Section 11.3 and ought to encourage applicants to provide a stable specification documenting the profile (even though the

o 配置文件注册请求的指定专家应寻求第11.3节下提供的所有问题的答案,并应鼓励申请人提供记录配置文件的稳定规范(即使

registration policy for PRECIS profiles is "Expert Review" and a stable specification is not strictly required).

PRECIS配置文件的注册政策为“专家审查”,不严格要求有稳定的规范)。

o Developers of applications that use PRECIS are strongly encouraged to apply the guidelines provided under Section 6 and to seek out the advice of the designated experts or other knowledgeable individuals in doing so.

o 强烈鼓励使用PRECIS的应用程序开发人员应用第6节提供的指南,并在这样做时征求指定专家或其他知识渊博的个人的建议。

o All parties are strongly encouraged to help prevent the multiplication of profiles beyond necessity, as described under Section 5.1, and to use PRECIS in ways that will minimize user confusion and insecure application behavior.

o 如第5.1节所述,强烈鼓励各方帮助防止不必要的概要文件倍增,并以将用户混淆和不安全的应用程序行为降至最低的方式使用PRECIS。

Internationalization can be difficult and contentious; designated experts, profile registrants, and application developers are strongly encouraged to work together in a spirit of good faith and mutual understanding to achieve rough consensus on profile registration requests and the use of PRECIS in particular applications. They are also encouraged to bring additional expertise into the discussion if that would be helpful in adding perspective or otherwise resolving issues.

国际化可能是困难和有争议的;强烈鼓励指定专家、概要文件注册人和应用程序开发人员本着诚信和相互理解的精神共同努力,就概要文件注册请求和在特定应用程序中使用PRECIS达成大致共识。还鼓励他们在讨论中引入更多的专业知识,如果这有助于增加观点或以其他方式解决问题。

11. IANA Considerations
11. IANA考虑
11.1. PRECIS Derived Property Value Registry
11.1. PRECIS派生属性值注册表

IANA has created and now maintains the "PRECIS Derived Property Value" registry (<https://www.iana.org/assignments/precis-tables/>), which records the derived properties for each version of Unicode released starting from version 6.3. The derived property value is to be calculated in cooperation with a designated expert [RFC8126] according to the rules specified under Sections 8 and 9.

IANA已经创建并维护了“PRECIS派生属性值”注册表(<https://www.iana.org/assignments/precis-tables/>),它记录从版本6.3开始发布的每个Unicode版本的派生属性。根据第8节和第9节规定的规则,与指定专家[RFC8126]合作计算衍生财产价值。

The IESG is to be notified if backward-incompatible changes to the table of derived properties are discovered or if other problems arise during the process of creating the table of derived property values or during Expert Review. Changes to the rules defined under Sections 8 and 9 require IETF Review.

如果发现派生属性表的向后不兼容更改,或者在创建派生属性值表的过程中或在专家审查期间出现其他问题,则应通知IESG。第8节和第9节规定的规则变更需要IETF审查。

Note: IANA is requested to not make further updates to this registry until it receives notice from the IESG that the issues described in [IAB-Statement] and Section 13.5 of this document have been settled.

注:请IANA在收到IESG关于[IAB声明]和本文件第13.5节所述问题已得到解决的通知之前,不得对本登记册进行进一步更新。

11.2. PRECIS Base Classes Registry
11.2. PRECIS基类注册表

IANA has created the "PRECIS Base Classes" registry (<https://www.iana.org/assignments/precis-parameters/>). In accordance with [RFC8126], the registration policy is "RFC Required".

IANA已经创建了“PRECIS基类”注册表(<https://www.iana.org/assignments/precis-parameters/>). 根据[RFC8126],注册政策为“需要RFC”。

The registration template is as follows:

注册模板如下:

Base Class: [the name of the PRECIS string class]

基类:[PRECIS字符串类的名称]

Description: [a brief description of the PRECIS string class and its intended use, e.g., "A sequence of letters, numbers, and symbols that is used to identify or address a network entity."]

描述:[PRECIS字符串类及其预期用途的简要说明,例如,“用于标识或寻址网络实体的字母、数字和符号序列。”]

Reference: [the RFC number]

参考:[RFC编号]

The initial registrations are as follows:

初步注册情况如下:

Base Class: FreeformClass Description: A sequence of letters, numbers, symbols, spaces, and other code points that is used for free-form strings. Specification: Section 4.3 of RFC 8264

基类:FreeformClass描述:用于自由格式字符串的字母、数字、符号、空格和其他代码点序列。规范:RFC 8264第4.3节

Base Class: IdentifierClass Description: A sequence of letters, numbers, and symbols that is used to identify or address a network entity. Specification: Section 4.2 of RFC 8264

基类:标识符类描述:用于标识或寻址网络实体的字母、数字和符号序列。规范:RFC 8264第4.2节

11.3. PRECIS Profiles Registry
11.3. PRECIS配置文件注册表

IANA has created the "PRECIS Profiles" registry (<https://www.iana.org/assignments/precis-parameters/>) to identify profiles that use the PRECIS string classes. In accordance with [RFC8126], the registration policy is "Expert Review". This policy was chosen in order to ease the burden of registration while ensuring that "customers" of PRECIS receive appropriate guidance regarding the sometimes complex and subtle internationalization issues related to profiles of PRECIS string classes.

IANA已经创建了“PRECIS配置文件”注册表(<https://www.iana.org/assignments/precis-parameters/>)识别使用PRECIS字符串类的配置文件。根据[RFC8126],注册政策为“专家审查”。选择这一政策是为了减轻注册负担,同时确保PRECIS的“客户”能够就与PRECIS字符串类概要文件相关的有时复杂而微妙的国际化问题获得适当的指导。

The registration template is as follows:

注册模板如下:

Name: [the name of the profile]

名称:[配置文件的名称]

Base Class: [which PRECIS string class is being profiled]

基类:[正在分析哪个PRECIS字符串类]

Applicability: [the specific protocol elements to which this profile applies, e.g., "Usernames in security and application protocols."]

适用性:[此配置文件适用的特定协议元素,例如,“安全和应用程序协议中的用户名”。]

Replaces: [the Stringprep profile that this PRECIS profile replaces, if any]

替换:[此PRECIS配置文件替换的Stringprep配置文件,如果有]

Width Mapping Rule: [the behavioral rule for handling of width, e.g., "Map fullwidth and halfwidth code points to their compatibility variants."]

宽度映射规则:[处理宽度的行为规则,例如,“将全宽和半宽代码点映射到它们的兼容变体。”]

Additional Mapping Rule: [any additional mappings that are required or recommended, e.g., "Map non-ASCII space code points to SPACE (U+0020)."]

附加映射规则:[需要或建议的任何附加映射,例如,“将非ASCII空间码点映射到空间(U+0020)。]

Case Mapping Rule: [the behavioral rule for handling of case, e.g., "Apply the Unicode toLowerCase() operation."]

案例映射规则:[处理案例的行为规则,例如,“应用Unicode toLowerCase()操作”。]

Normalization Rule: [which Unicode normalization form is applied, e.g., "NFC"]

规范化规则:[应用哪个Unicode规范化表单,例如,“NFC”]

Directionality Rule: [the behavioral rule for handling of right-to-left code points, e.g., "The 'Bidi Rule' defined in RFC 5893 applies."]

方向性规则:[处理从右到左代码点的行为规则,例如,“RFC 5893中定义的‘Bidi规则’适用。”]

Enforcement: [which entities enforce the rules, and when that enforcement occurs during protocol operations]

强制执行:[哪些实体强制执行规则,以及在协议操作期间强制执行的时间]

Specification: [a pointer to relevant documentation, such as an RFC or Internet-Draft]

规范:[指向相关文档的指针,如RFC或互联网草稿]

In order to request a review, the registrant shall send a completed template to the <precis@ietf.org> list or its designated successor.

为了请求审查,注册人应向<precis@ietf.org>名单或其指定的继任者。

Factors to focus on while defining profiles and reviewing profile registrations include the following:

定义配置文件和审查配置文件注册时需要关注的因素包括:

o Would an existing PRECIS string class or profile solve the problem? If not, why not? (See Section 5.1 for related considerations.)

o 现有的PRECIS字符串类或配置文件能否解决此问题?若否,原因为何?(有关注意事项,请参见第5.1节。)

o Is the problem being addressed by this profile well defined?

o 此概要文件解决的问题是否定义良好?

o Does the specification define what kinds of applications are involved and the protocol elements to which this profile applies?

o 规范是否定义了所涉及的应用程序类型以及此概要文件适用的协议元素?

o Is the profile clearly defined?

o 轮廓是否明确定义?

o Is the profile based on an appropriate dividing line between user interface (culture, context, intent, locale, device limitations, etc.) and the use of conformant strings in protocol elements?

o 配置文件是否基于用户界面(文化、上下文、意图、区域设置、设备限制等)和协议元素中一致字符串的使用之间的适当分界线?

o Are the width mapping, case mapping, additional mapping, normalization, and directionality rules appropriate for the intended use?

o 宽度映射、大小写映射、附加映射、规范化和方向性规则是否适合预期用途?

o Does the profile explain which entities enforce the rules and when such enforcement occurs during protocol operations?

o 概要文件是否解释了哪些实体执行规则以及在协议操作期间何时执行规则?

o Does the profile reduce the degree to which human users could be surprised or confused by application behavior (the "Principle of Least Astonishment")?

o 该概要文件是否降低了人类用户对应用程序行为感到惊讶或困惑的程度(“最少惊讶原则”)?

o Does the profile introduce any new security concerns such as those described under Section 12 of this document (e.g., false accepts for authentication or authorization)?

o 概要文件是否引入了任何新的安全问题,如本文件第12节所述的安全问题(例如,认证或授权的虚假接受)?

12. Security Considerations
12. 安全考虑
12.1. General Issues
12.1. 一般问题

If input strings that appear "the same" to users are programmatically considered to be distinct in different systems or if input strings that appear distinct to users are programmatically considered to be "the same" in different systems, then users can be confused. Such confusion can have security implications, such as the false accepts and false rejects discussed in [RFC6943] (the terms "false positives" and "false negatives" are used in that document). One starting goal of work on the PRECIS framework was to limit the number of times that users are confused (consistent with the "Principle of Least Astonishment"). Unfortunately, this goal has been difficult to achieve given the large number of application protocols already in existence. Despite these difficulties, profiles should not be multiplied beyond necessity (see Section 5.1). In particular, designers of application protocols should think long and hard before defining a new profile instead of using one that has already been defined, and if they decide to define a new profile then they should clearly explain their reasons for doing so.

如果在不同的系统中,以编程方式将对用户显示为“相同”的输入字符串视为不同的,或者如果以编程方式将对用户显示为不同的输入字符串视为在不同的系统中“相同”,则可能会混淆用户。这种混淆可能具有安全含义,例如[RFC6943]中讨论的错误接受和错误拒绝(该文档中使用了术语“误报”和“误报”)。PRECIS框架工作的一个初始目标是限制用户感到困惑的次数(符合“最小惊讶原则”)。不幸的是,鉴于已经存在大量的应用程序协议,这一目标很难实现。尽管存在这些困难,但剖面图不应超出必要性(见第5.1节)。特别是,应用程序协议的设计者在定义一个新的概要文件之前应该仔细考虑,而不是使用一个已经定义的概要文件,如果他们决定定义一个新的概要文件,那么他们应该清楚地解释这样做的原因。

The security of applications that use this framework can depend in part on the proper preparation, enforcement, and comparison of internationalized strings. For example, such strings can be used to make authentication and authorization decisions, and the security of an application could be compromised if an entity providing a given string is connected to the wrong account or online resource based on different interpretations of the string (again, see [RFC6943]).

使用此框架的应用程序的安全性部分取决于国际化字符串的正确准备、执行和比较。例如,此类字符串可用于做出身份验证和授权决策,如果提供给定字符串的实体根据字符串的不同解释连接到错误的帐户或在线资源,则应用程序的安全性可能会受到损害(同样,请参见[RFC6943])。

Specifications of application protocols that use this framework are strongly encouraged to describe how internationalized strings are used in the protocol, including the security implications of any false accepts and false rejects that might result from various enforcement and comparison operations. For some helpful guidelines, refer to [RFC6943], [RFC5890], [UTR36], and [UTS39].

强烈建议使用此框架的应用程序协议规范描述如何在协议中使用国际化字符串,包括各种强制和比较操作可能导致的任何错误接受和错误拒绝的安全含义。有关一些有用的指南,请参阅[RFC6943]、[RFC5890]、[UTR36]和[UTS39]。

12.2. Use of the IdentifierClass
12.2. IdentifierClass的使用

Strings that conform to the IdentifierClass, and any profile thereof, are intended to be relatively safe for use in a broad range of applications, primarily because they include only letters, digits, and "grandfathered" non-space code points from the ASCII range; thus, they exclude spaces, code points with compatibility equivalents, and almost all symbols and punctuation marks. However, because such strings can still include so-called "confusable code points" (see Section 12.5), protocol designers and implementers are encouraged to pay close attention to the security considerations described elsewhere in this document.

符合IdentifierClass及其任何配置文件的字符串旨在在广泛的应用中相对安全地使用,主要是因为它们仅包括ASCII范围内的字母、数字和“祖父”非空格代码点;因此,它们排除了空格、具有兼容性等价物的代码点以及几乎所有的符号和标点符号。但是,由于此类字符串仍可能包含所谓的“易混淆代码点”(见第12.5节),因此鼓励协议设计者和实现者密切关注本文档其他地方描述的安全注意事项。

12.3. Use of the FreeformClass
12.3. FreeformClass的使用

Strings that conform to the FreeformClass, and many profiles thereof, can include virtually any Unicode code point. This makes the FreeformClass quite expressive, but also problematic from the perspective of possible user confusion. Protocol designers are hereby warned that the FreeformClass contains code points they might not understand, and they are encouraged to profile the IdentifierClass wherever feasible; however, if an application protocol requires more code points than are allowed by the IdentifierClass, protocol designers are encouraged to define a profile of the FreeformClass that restricts the allowable code points as tightly as possible. (The PRECIS Working Group considered the option of allowing "superclasses" as well as profiles of PRECIS string classes but decided against allowing superclasses to reduce the likelihood of security and interoperability problems.)

符合FreeformClass及其许多配置文件的字符串几乎可以包括任何Unicode代码点。这使得FreeformClass非常有表现力,但从用户可能感到困惑的角度来看,它也有问题。特此警告协议设计者,FreeformClass包含他们可能不理解的代码点,并鼓励他们在可行的情况下分析IdentifierClass;但是,如果应用程序协议需要的代码点多于IdentifierClass允许的代码点,则鼓励协议设计人员定义FreeformClass的概要文件,以尽可能严格地限制允许的代码点。(PRECIS工作组考虑了允许使用“超类”以及PRECIS字符串类的配置文件的选项,但决定不允许使用超类以降低安全性和互操作性问题的可能性。)

12.4. Local Character Set Issues
12.4. 局部字符集问题

When systems use local character sets other than ASCII and Unicode, this specification leaves the problem of converting between the local character set and Unicode up to the application or local system. If different applications (or different versions of one application) implement different rules for conversions among coded character sets, they could interpret the same name differently and contact different application servers or other network entities. This problem is not solved by security protocols, such as Transport Layer Security (TLS) [RFC5246] and SASL [RFC4422], that do not take local character sets into account.

当系统使用ASCII和Unicode以外的本地字符集时,本规范将本地字符集和Unicode之间的转换问题留给应用程序或本地系统。如果不同的应用程序(或一个应用程序的不同版本)在编码字符集之间实现不同的转换规则,它们可能会对同一名称进行不同的解释,并联系不同的应用程序服务器或其他网络实体。安全协议(如传输层安全协议(TLS)[RFC5246]和SASL[RFC4422])不考虑本地字符集,无法解决此问题。

12.5. Visually Similar Characters
12.5. 视觉上相似的字符

Some code points are visually similar and thus can cause confusion among humans. Such characters are often called "confusable characters" or "confusables".

一些代码点在视觉上是相似的,因此可能会引起人类之间的混淆。这些字符通常被称为“易混淆字符”或“易混淆字符”。

The problem of confusable characters is not necessarily caused by the use of Unicode code points outside the ASCII range. For example, in some presentations and to some individuals the string "ju1iet" (spelled with DIGIT ONE (U+0031) as the third character) might appear to be the same as "juliet" (spelled with LATIN SMALL LETTER L (U+006C)), especially on casual visual inspection. This phenomenon is sometimes called "typejacking".

易混淆字符的问题不一定是由于使用ASCII范围以外的Unicode代码点造成的。例如,在某些演示文稿中,对某些人来说,字符串“ju1iet”(以数字1(U+0031)作为第三个字符拼写)可能与“juliet”(以拉丁文小写字母L(U+006C)拼写)相同,特别是在偶然的目视检查中。这种现象有时被称为“类型劫持”。

However, the problem is made more serious by introducing the full range of Unicode code points into protocol strings. A well-known example is confusion between "а" CYRILLIC SMALL LETTER A (U+0430) and "a" LATIN SMALL LETTER A (U+0061). As another example, the characters "ᏚᎢᎵᏋᎢᏋᏒ" (U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2) from the Cherokee block look similar to the ASCII code points representing "STPETER" as they might appear when presented using a "creative" font family. Confusion among such characters is perhaps not unexpected, given that the alphabetic writing systems involved all bear a family resemblance or historical lineage. Perhaps more surprising is confusion among characters from disparate writing systems, such as "O" (LATIN CAPITAL LETTER O, U+004F), "0" (DIGIT ZERO, U+0030), "໐" (LAO DIGIT ZERO, U+0ED0), "ዐ" (ETHIOPIC SYLLABLE PHARYNGEAL A, U+12D0), and other graphemes that have the appearance of open circles. And the reader needs to be aware that the foregoing represent merely a small sample of characters that are confusable in Unicode.

然而,通过在协议字符串中引入全范围的Unicode代码点,问题变得更加严重。一个著名的例子是“а”西里尔字母A(U+0430)和“A”拉丁字母A(U+0061)之间的混淆。另一个例子是,字符“ᏚᎢᎵᏋᎢᏋᏒ" 切诺基区块的(U+13DA U+13A2 U+13B5 U+13AC U+13A2 U+13AC U+13D2)看起来类似于代表“STPETER”的ASCII码点,因为它们在使用“创造性”符号表示时可能会出现“字体系列。这些字符之间的混淆也许并不意外,因为所涉及的字母书写系统都具有家族相似性或历史血统。也许更令人惊讶的是来自不同书写系统的字符之间的混淆,例如“O”(拉丁文大写字母O,U+004F)、“0”(数字0,U+0030)、”໐" (老挝数字0,U+0ED0),”ዐ(ETHIOPIC音节咽部A,U+12D0)和其他具有开放圆外观的字形。读者需要注意的是,上述内容仅代表Unicode中容易混淆的一小部分字符。

In some instances of confusable characters, it is unlikely that the average human could tell the difference between the real string and the fake string. (Indeed, there is no programmatic way to distinguish with full certainty which is the fake string and which is the real string; in some contexts, the string formed of Cherokee code points might be the real string and the string formed of ASCII code points might be the fake string.) Because PRECIS-compliant strings can contain almost any properly encoded Unicode code point, it can be relatively easy to fake or mimic some strings in systems that use the PRECIS framework. The fact that some strings are easily confused introduces security vulnerabilities of the kind that have also plagued the World Wide Web, specifically the phenomenon known as phishing.

在一些易混淆字符的情况下,普通人不太可能分辨出真字符串和假字符串之间的区别。(事实上,没有编程方法可以完全确定地区分哪个是假字符串,哪个是真字符串;在某些上下文中,切诺基代码点形成的字符串可能是真字符串,而ASCII代码点形成的字符串可能是假字符串。)由于与PRECIS兼容的字符串几乎可以包含任何正确编码的Unicode代码点,因此在使用PRECIS框架的系统中,伪造或模拟某些字符串相对容易。一些字符串容易混淆的事实引入了同样困扰万维网的安全漏洞,特别是被称为钓鱼的现象。

Despite the fact that some specific suggestions about identification and handling of confusable characters appear in the Unicode Security Considerations [UTR36] and the Unicode Security Mechanisms [UTS39], it is also true (as noted in [RFC5890]) that "there are no comprehensive technical solutions to the problems of confusable characters." Because it is impossible to map visually similar characters without a great deal of context (such as knowing the font families used), the PRECIS framework does nothing to map similar-

尽管Unicode安全注意事项[UTR36]和Unicode安全机制[UTS39]中出现了一些关于易混淆字符的识别和处理的具体建议,但(如[RFC5890]中所述)“对于易混淆字符的问题没有全面的技术解决方案”也是正确的因为在没有大量上下文的情况下(例如知道使用的字体系列),不可能在视觉上映射相似的字符,所以PRECIS框架不会映射相似的字符-

looking characters together, nor does it prohibit some characters because they look like others.

将角色放在一起看,也不禁止某些角色,因为它们看起来像其他角色。

Nevertheless, specifications for application protocols that use this framework are strongly encouraged to describe how confusable characters can be abused to compromise the security of systems that use the protocol in question, along with any protocol-specific suggestions for overcoming those threats. In particular, software implementations and service deployments that use PRECIS-based technologies are strongly encouraged to define and implement consistent policies regarding the registration, storage, and presentation of visually similar characters. The following recommendations are appropriate:

然而,强烈鼓励使用此框架的应用程序协议规范描述可混淆字符如何被滥用以危害使用该协议的系统的安全性,以及克服这些威胁的任何特定于协议的建议。特别是,强烈鼓励使用基于PRECIS的技术的软件实施和服务部署定义和实施有关视觉相似字符的注册、存储和表示的一致策略。以下建议是适当的:

1. An application service SHOULD define a policy that specifies the scripts or blocks of code points that the service will allow to be registered (e.g., in an account name) or stored (e.g., in a filename). Such a policy SHOULD be informed by the languages and scripts that are used to write registered account names; in particular, to reduce confusion, the service SHOULD forbid registration or storage of strings that contain code points from more than one script and SHOULD restrict registrations to code points drawn from a very small number of scripts (e.g., scripts that are well understood by the administrators of the service, to improve manageability).

1. 应用程序服务应定义一个策略,指定服务将允许注册(例如,在帐户名中)或存储(例如,在文件名中)的脚本或代码点块。此类政策应通过用于书写注册账户名称的语言和脚本进行通知;特别是,为了减少混淆,服务应禁止注册或存储包含多个脚本中的代码点的字符串,并应将注册限制为从极少量脚本中提取的代码点(例如,服务管理员非常了解的脚本,以提高可管理性)。

2. User-oriented application software SHOULD define a policy that specifies how internationalized strings will be presented to a human user. Because every human user of such software has a preferred language or a small set of preferred languages, the software SHOULD gather that information either explicitly from the user or implicitly via the operating system of the user's device.

2. 面向用户的应用程序软件应该定义一个策略,指定如何将国际化字符串呈现给人类用户。由于此类软件的每个人类用户都有一种首选语言或一小部分首选语言,因此该软件应明确地从用户处或通过用户设备的操作系统隐式地收集该信息。

The challenges inherent in supporting the full range of Unicode code points have in the past led some to hope for a way to programmatically negotiate more restrictive ranges based on locale, script, or other relevant factors; to tag the locale associated with a particular string; etc. As a general-purpose internationalization technology, the PRECIS framework does not include such mechanisms.

在过去,支持全范围Unicode代码点所固有的挑战使一些人希望找到一种基于区域设置、脚本或其他相关因素以编程方式协商更严格范围的方法;标记与特定字符串关联的区域设置;作为一种通用国际化技术,PRECIS框架不包括此类机制。

12.6. Security of Passwords
12.6. 密码的安全性

Two goals of passwords are to maximize the amount of entropy and to minimize the potential for false accepts. These goals can be achieved in part by allowing a wide range of code points and by ensuring that passwords are handled in such a way that code points are not compared aggressively. Therefore, it is NOT RECOMMENDED for

密码的两个目标是最大化熵和最小化错误接受的可能性。这些目标可以通过允许范围广泛的代码点,并确保密码的处理方式不会对代码点进行激烈的比较来部分实现。因此,不建议将其用于

application protocols to profile the FreeformClass for use in passwords in a way that removes entire categories (e.g., by disallowing symbols or punctuation). Furthermore, it is NOT RECOMMENDED for application protocols to map uppercase and titlecase code points to their lowercase equivalents in such strings; instead, it is RECOMMENDED to preserve the case of all code points contained in such strings and to compare them in a case-sensitive manner.

应用程序协议,以删除整个类别(例如,不允许使用符号或标点符号)的方式配置FreeformClass,以便在密码中使用。此外,不建议应用程序协议将大写和titlecase代码点映射到此类字符串中的小写等价物;相反,建议保留此类字符串中包含的所有代码点的大小写,并以区分大小写的方式进行比较。

That said, software implementers need to be aware that there exist trade-offs between entropy and usability. For example, allowing a user to establish a password containing "uncommon" code points might make it difficult for the user to access a service when using an unfamiliar or constrained input device.

也就是说,软件实现者需要意识到熵和可用性之间存在权衡。例如,允许用户建立包含“不常见”代码点的密码可能会使用户在使用不熟悉或受限的输入设备时难以访问服务。

Some application protocols use passwords directly, whereas others reuse technologies that themselves process passwords (one example of such a technology is SASL [RFC4422]). Moreover, passwords are often carried by a sequence of protocols with backend authentication systems or data storage systems such as RADIUS [RFC2865] and the Lightweight Directory Access Protocol (LDAP) [RFC4510]. Developers of application protocols are encouraged to look into reusing these profiles instead of defining new ones, so that end-user expectations about passwords are consistent no matter which application protocol is used.

一些应用程序协议直接使用密码,而另一些则重用自己处理密码的技术(这种技术的一个例子是SASL[RFC4422])。此外,密码通常由一系列具有后端身份验证系统或数据存储系统的协议携带,如RADIUS[RFC2865]和轻型目录访问协议(LDAP)[RFC4510]。鼓励应用程序协议的开发人员考虑重用这些配置文件,而不是定义新的配置文件,这样无论使用哪种应用程序协议,最终用户对密码的期望都是一致的。

In protocols that provide passwords as input to a cryptographic algorithm such as a hash function, the client will need to perform proper preparation of the password before applying the algorithm, because the password is not available to the server in plaintext form.

在提供密码作为密码算法(如哈希函数)输入的协议中,客户端需要在应用算法之前对密码进行适当的准备,因为服务器无法以明文形式使用密码。

Further discussion of password handling can be found in [RFC8265].

有关密码处理的进一步讨论,请参见[RFC8265]。

13. Interoperability Considerations
13. 互操作性注意事项
13.1. Coded Character Sets
13.1. 编码字符集

It is known that some existing applications and systems do not support the full Unicode coded character set, or even any characters outside the ASCII repertoire [RFC20]. If two (or more) applications or systems need to interoperate when exchanging data (e.g., for the purpose of authenticating the combination of a username and password), naturally they will need to have in common at least one coded character set and the repertoire of characters being exchanged (see [RFC6365] for definitions of these terms). Establishing such a baseline is a matter for the application or system that uses PRECIS, not for the PRECIS framework.

众所周知,一些现有的应用程序和系统不支持完整的Unicode编码字符集,甚至不支持ASCII指令表[RFC20]之外的任何字符。如果两个(或多个)应用程序或系统在交换数据时需要互操作(例如,为了验证用户名和密码的组合),那么它们自然需要至少有一个编码字符集和正在交换的字符集(有关这些术语的定义,请参阅[RFC6365])。建立这样的基线是使用PRECIS的应用程序或系统的事情,而不是PRECIS框架的事情。

13.2. Dependency on Unicode
13.2. 对Unicode的依赖

The only coded character set supported by PRECIS is Unicode. If an application or system does not support Unicode or uses a different coded character set [RFC6365], then the PRECIS rules cannot be applied to that application or system.

PRECIS支持的唯一编码字符集是Unicode。如果应用程序或系统不支持Unicode或使用不同的编码字符集[RFC6365],则PRECIS规则无法应用于该应用程序或系统。

13.3. Encoding
13.3. 编码

Although strings that are consumed in PRECIS-based application protocols are often encoded using UTF-8 [RFC3629], the exact encoding is a matter for the application protocol that uses PRECIS, not for the PRECIS framework or for specifications that define PRECIS string classes or profiles thereof.

尽管基于PRECIS的应用协议中使用的字符串通常使用UTF-8[RFC3629]进行编码,但精确编码是使用PRECIS的应用协议的问题,而不是PRECIS框架或定义PRECIS字符串类或其配置文件的规范的问题。

13.4. Unicode Versions
13.4. Unicode版本

It is extremely important for protocol designers and application developers to understand that various changes can occur across versions of the Unicode Standard, and such changes can result in instability of PRECIS categories. The following are merely a few examples:

对于协议设计者和应用程序开发人员来说,了解Unicode标准的不同版本可能会发生各种更改是非常重要的,这些更改可能会导致PRECIS类别的不稳定性。以下只是几个例子:

o As described in [RFC6452], between Unicode 5.2 (current at the time IDNA2008 was originally published) and Unicode 6.0, three code points underwent changes in their GeneralCategory, resulting in modified handling, depending on which version of Unicode is available on the underlying system.

o 如[RFC6452]中所述,在Unicode 5.2(IDNA2008最初发布时的当前版本)和Unicode 6.0之间,三个代码点的通用类别发生了更改,从而导致修改处理,具体取决于基础系统上可用的Unicode版本。

o The HasCompat() categorization of a given input string could change if, for example, the string includes a precomposed character that was added in a recent version of Unicode.

o 例如,如果给定输入字符串包含在最新版本的Unicode中添加的预合成字符,则该字符串的HasCompat()分类可能会更改。

o The East Asian width property, which is used in many PRECIS width mapping rules, is not guaranteed to be stable across Unicode versions.

o 许多PRECIS宽度映射规则中使用的东亚宽度属性不能保证在Unicode版本中稳定。

13.5. Potential Changes to Handling of Certain Unicode Code Points
13.5. 某些Unicode代码点处理的潜在更改

As part of the review of Unicode 7.0 for IDNA, a question was raised about a newly added code point that led to a re-analysis of the normalization rules used by IDNA and inherited by this document (Section 5.2.4). Some of the general issues are described in [IAB-Statement] and pursued in more detail in [IDNA-Unicode].

作为IDNA Unicode 7.0审查的一部分,提出了一个关于新添加的代码点的问题,该代码点导致重新分析IDNA使用并由本文档继承的规范化规则(第5.2.4节)。一些一般性问题在[IAB声明]中进行了描述,并在[IDNA Unicode]中进行了更详细的阐述。

At the time of this writing, these issues have yet to be settled. However, implementers need to be aware that this specification is

在撰写本文时,这些问题尚未得到解决。然而,实现者需要意识到这个规范是

likely to be updated in the future to address these issues. The potential changes include but might not be limited to the following:

可能在将来更新以解决这些问题。潜在变更包括但不限于以下内容:

o The range of code points in the LetterDigits category (Sections 4.2.1 and 9.1) might be narrowed.

o 字母数字类别(第4.2.1节和第9.1节)中的代码点范围可能会缩小。

o Some code points with special properties that are now allowed might be excluded.

o 现在允许的某些具有特殊属性的代码点可能会被排除。

o More additional mapping rules (Section 5.2.2) might be defined.

o 可能会定义更多的映射规则(第5.2.2节)。

o Alternative normalization methods might be added.

o 可以添加其他规范化方法。

As described in Section 11.1, until these issues are settled, it is reasonable for the IANA to apply the same precautionary principle described in [IAB-Statement] to the "PRECIS Derived Property Value" registry as is applied to the "IDNA Parameters" registry <https://www.iana.org/assignments/idna-tables/>: that is, to not make further updates to the registry.

如第11.1节所述,在解决这些问题之前,IANA有理由将[IAB声明]中所述的预防原则应用于“PRECIS衍生财产价值”注册表,就像应用于“IDNA参数”注册表一样<https://www.iana.org/assignments/idna-tables/>:即,不要对注册表进行进一步更新。

Nevertheless, implementations and deployments are unlikely to encounter significant problems as a consequence of these issues or potential changes if they follow the advice given in this specification to use the more restrictive IdentifierClass whenever possible or, if using the FreeformClass, to allow only a restricted set of code points, particularly avoiding code points whose implications they do not understand.

然而,如果实现和部署遵循本规范中给出的建议,尽可能使用限制更严格的IdentifierClass,或者如果使用FreeformClass,仅允许一组受限的代码点,则不太可能由于这些问题或潜在的更改而遇到重大问题,特别是避免他们不理解其含义的代码点。

14. References
14. 工具书类
14.1. Normative References
14.1. 规范性引用文件

[RFC20] Cerf, V., "ASCII format for network interchange", STD 80, RFC 20, DOI 10.17487/RFC0020, October 1969, <https://www.rfc-editor.org/info/rfc20>.

[RFC20]Cerf,V.,“网络交换的ASCII格式”,STD 80,RFC 20,DOI 10.17487/RFC0020,1969年10月<https://www.rfc-editor.org/info/rfc20>.

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.

[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,DOI 10.17487/RFC2119,1997年3月<https://www.rfc-editor.org/info/rfc2119>.

[RFC5198] Klensin, J. and M. Padlipsky, "Unicode Format for Network Interchange", RFC 5198, DOI 10.17487/RFC5198, March 2008, <https://www.rfc-editor.org/info/rfc5198>.

[RFC5198]Klensin,J.和M.Padlipsky,“网络交换的Unicode格式”,RFC 5198,DOI 10.17487/RFC5198,2008年3月<https://www.rfc-editor.org/info/rfc5198>.

[RFC6365] Hoffman, P. and J. Klensin, "Terminology Used in Internationalization in the IETF", BCP 166, RFC 6365, DOI 10.17487/RFC6365, September 2011, <https://www.rfc-editor.org/info/rfc6365>.

[RFC6365]Hoffman,P.和J.Klensin,“IETF国际化中使用的术语”,BCP 166,RFC 6365,DOI 10.17487/RFC6365,2011年9月<https://www.rfc-editor.org/info/rfc6365>.

[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.

[RFC8174]Leiba,B.,“RFC 2119关键词中大写与小写的歧义”,BCP 14,RFC 8174,DOI 10.17487/RFC8174,2017年5月<https://www.rfc-editor.org/info/rfc8174>.

[Unicode] The Unicode Consortium, "The Unicode Standard", <http://www.unicode.org/versions/latest/>.

[Unicode]Unicode联盟,“Unicode标准”<http://www.unicode.org/versions/latest/>.

14.2. Informative References
14.2. 资料性引用

[DerivedCoreProperties] The Unicode Consortium, "DerivedCoreProperties-10.0.0.txt", Unicode Character Database, March 2017, <http://www.unicode.org/Public/UCD/latest/ucd/ DerivedCoreProperties.txt>.

[DerivedCoreProperties]Unicode联盟,“DerivedCoreProperties-10.0.0.txt”,Unicode字符数据库,2017年3月<http://www.unicode.org/Public/UCD/latest/ucd/ DerivedCoreProperties.txt>。

[Err4568] RFC Errata, Erratum ID 4568, RFC 7564, <https://www.rfc-editor.org/errata/eid4568>.

[Err4568]RFC勘误表,勘误表ID 4568,RFC 7564<https://www.rfc-editor.org/errata/eid4568>.

[IAB-Statement] Internet Architecture Board, "IAB Statement on Identifiers and Unicode 7.0.0", February 2015, <https://www.iab.org/documents/ correspondence-reports-documents/2015-2/ iab-statement-on-identifiers-and-unicode-7-0-0/>.

[IAB声明]互联网架构委员会,“IAB关于标识符和Unicode 7.0.0的声明”,2015年2月<https://www.iab.org/documents/ 通信报告文件/2015-2/iab-statement-on-identifiers-and-unicode-7-0-0/>。

[IDNA-Unicode] Klensin, J. and P. Faltstrom, "IDNA Update for Unicode 7.0.0", Work in Progress, draft-klensin-idna-5892upd-unicode70-04, March 2015.

[IDNA Unicode]Klensin,J.和P.Faltstrom,“Unicode 7.0.0的IDNA更新”,正在进行的工作,草稿-Klensin-IDNA-5892upd-Unicode 70-042015年3月。

[PropertyAliases] The Unicode Consortium, "PropertyAliases-10.0.0.txt", Unicode Character Database, February 2017, <http://www.unicode.org/Public/UCD/latest/ucd/ PropertyAliases.txt>.

[PropertyAliases]Unicode联盟,“PropertyAliases-10.0.0.txt”,Unicode字符数据库,2017年2月<http://www.unicode.org/Public/UCD/latest/ucd/ propertyaliasses.txt>。

[RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, "Remote Authentication Dial In User Service (RADIUS)", RFC 2865, DOI 10.17487/RFC2865, June 2000, <https://www.rfc-editor.org/info/rfc2865>.

[RFC2865]Rigney,C.,Willens,S.,Rubens,A.,和W.Simpson,“远程认证拨入用户服务(RADIUS)”,RFC 2865,DOI 10.17487/RFC2865,2000年6月<https://www.rfc-editor.org/info/rfc2865>.

[RFC3454] Hoffman, P. and M. Blanchet, "Preparation of Internationalized Strings ("stringprep")", RFC 3454, DOI 10.17487/RFC3454, December 2002, <https://www.rfc-editor.org/info/rfc3454>.

[RFC3454]Hoffman,P.和M.Blanchet,“国际化字符串的准备(“stringprep”)”,RFC 3454,DOI 10.17487/RFC3454,2002年12月<https://www.rfc-editor.org/info/rfc3454>.

[RFC3490] Faltstrom, P., Hoffman, P., and A. Costello, "Internationalizing Domain Names in Applications (IDNA)", RFC 3490, DOI 10.17487/RFC3490, March 2003, <https://www.rfc-editor.org/info/rfc3490>.

[RFC3490]Faltstrom,P.,Hoffman,P.,和A.Costello,“应用程序中的域名国际化(IDNA)”,RFC 3490,DOI 10.17487/RFC3490,2003年3月<https://www.rfc-editor.org/info/rfc3490>.

[RFC3491] Hoffman, P. and M. Blanchet, "Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)", RFC 3491, DOI 10.17487/RFC3491, March 2003, <https://www.rfc-editor.org/info/rfc3491>.

[RFC3491]Hoffman,P.和M.Blanchet,“Nameprep:国际化域名(IDN)的Stringprep配置文件”,RFC 3491,DOI 10.17487/RFC34912003年3月<https://www.rfc-editor.org/info/rfc3491>.

[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November 2003, <https://www.rfc-editor.org/info/rfc3629>.

[RFC3629]Yergeau,F.,“UTF-8,ISO 10646的转换格式”,STD 63,RFC 3629,DOI 10.17487/RFC3629,2003年11月<https://www.rfc-editor.org/info/rfc3629>.

[RFC4422] Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple Authentication and Security Layer (SASL)", RFC 4422, DOI 10.17487/RFC4422, June 2006, <https://www.rfc-editor.org/info/rfc4422>.

[RFC4422]Melnikov,A.,Ed.和K.Zeilenga,Ed.,“简单身份验证和安全层(SASL)”,RFC 4422,DOI 10.17487/RFC4422,2006年6月<https://www.rfc-editor.org/info/rfc4422>.

[RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map", RFC 4510, DOI 10.17487/RFC4510, June 2006, <https://www.rfc-editor.org/info/rfc4510>.

[RFC4510]Zeilenga,K.,Ed.“轻量级目录访问协议(LDAP):技术规范路线图”,RFC 4510,DOI 10.17487/RFC4510,2006年6月<https://www.rfc-editor.org/info/rfc4510>.

[RFC4690] Klensin, J., Faltstrom, P., Karp, C., and IAB, "Review and Recommendations for Internationalized Domain Names (IDNs)", RFC 4690, DOI 10.17487/RFC4690, September 2006, <https://www.rfc-editor.org/info/rfc4690>.

[RFC4690]Klensin,J.,Faltstrom,P.,Karp,C.,和IAB,“国际化域名(IDN)的审查和建议”,RFC 4690,DOI 10.17487/RFC4690,2006年9月<https://www.rfc-editor.org/info/rfc4690>.

[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.

[RFC5234]Crocker,D.,Ed.和P.Overell,“语法规范的扩充BNF:ABNF”,STD 68,RFC 5234,DOI 10.17487/RFC5234,2008年1月<https://www.rfc-editor.org/info/rfc5234>.

[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security (TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/RFC5246, August 2008, <https://www.rfc-editor.org/info/rfc5246>.

[RFC5246]Dierks,T.和E.Rescorla,“传输层安全(TLS)协议版本1.2”,RFC 5246,DOI 10.17487/RFC5246,2008年8月<https://www.rfc-editor.org/info/rfc5246>.

[RFC5890] Klensin, J., "Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework", RFC 5890, DOI 10.17487/RFC5890, August 2010, <https://www.rfc-editor.org/info/rfc5890>.

[RFC5890]Klensin,J.,“应用程序的国际化域名(IDNA):定义和文档框架”,RFC 5890,DOI 10.17487/RFC5890,2010年8月<https://www.rfc-editor.org/info/rfc5890>.

[RFC5891] Klensin, J., "Internationalized Domain Names in Applications (IDNA): Protocol", RFC 5891, DOI 10.17487/RFC5891, August 2010, <https://www.rfc-editor.org/info/rfc5891>.

[RFC5891]Klensin,J.,“应用程序中的国际化域名(IDNA):协议”,RFC 5891,DOI 10.17487/RFC5891,2010年8月<https://www.rfc-editor.org/info/rfc5891>.

[RFC5892] Faltstrom, P., Ed., "The Unicode Code Points and Internationalized Domain Names for Applications (IDNA)", RFC 5892, DOI 10.17487/RFC5892, August 2010, <https://www.rfc-editor.org/info/rfc5892>.

[RFC5892]Faltstrom,P.,Ed.“Unicode码点和应用程序的国际化域名(IDNA)”,RFC 5892,DOI 10.17487/RFC5892,2010年8月<https://www.rfc-editor.org/info/rfc5892>.

[RFC5893] Alvestrand, H., Ed. and C. Karp, "Right-to-Left Scripts for Internationalized Domain Names for Applications (IDNA)", RFC 5893, DOI 10.17487/RFC5893, August 2010, <https://www.rfc-editor.org/info/rfc5893>.

[RFC5893]Alvestrand,H.,Ed.和C.Karp,“应用程序国际化域名(IDNA)的从右到左脚本”,RFC 5893,DOI 10.17487/RFC5893,2010年8月<https://www.rfc-editor.org/info/rfc5893>.

[RFC5894] Klensin, J., "Internationalized Domain Names for Applications (IDNA): Background, Explanation, and Rationale", RFC 5894, DOI 10.17487/RFC5894, August 2010, <https://www.rfc-editor.org/info/rfc5894>.

[RFC5894]Klensin,J.,“应用程序的国际化域名(IDNA):背景、解释和理由”,RFC 5894,DOI 10.17487/RFC5894,2010年8月<https://www.rfc-editor.org/info/rfc5894>.

[RFC5895] Resnick, P. and P. Hoffman, "Mapping Characters for Internationalized Domain Names in Applications (IDNA) 2008", RFC 5895, DOI 10.17487/RFC5895, September 2010, <https://www.rfc-editor.org/info/rfc5895>.

[RFC5895]Resnick,P.和P.Hoffman,“应用程序中国际化域名的映射字符(IDNA)2008”,RFC 5895,DOI 10.17487/RFC5895,2010年9月<https://www.rfc-editor.org/info/rfc5895>.

[RFC6452] Faltstrom, P., Ed. and P. Hoffman, Ed., "The Unicode Code Points and Internationalized Domain Names for Applications (IDNA) - Unicode 6.0", RFC 6452, DOI 10.17487/RFC6452, November 2011, <https://www.rfc-editor.org/info/rfc6452>.

[RFC6452]Faltstrom,P.,Ed.和P.Hoffman,Ed.,“应用程序的Unicode码点和国际化域名(IDNA)-Unicode 6.0”,RFC 6452,DOI 10.17487/RFC6452,2011年11月<https://www.rfc-editor.org/info/rfc6452>.

[RFC6885] Blanchet, M. and A. Sullivan, "Stringprep Revision and Problem Statement for the Preparation and Comparison of Internationalized Strings (PRECIS)", RFC 6885, DOI 10.17487/RFC6885, March 2013, <https://www.rfc-editor.org/info/rfc6885>.

[RFC6885]Blanchet,M.和A.Sullivan,“编制和比较国际化字符串(PRECIS)的Stringprep修订和问题声明”,RFC 6885,DOI 10.17487/RFC6885,2013年3月<https://www.rfc-editor.org/info/rfc6885>.

[RFC6943] Thaler, D., Ed., "Issues in Identifier Comparison for Security Purposes", RFC 6943, DOI 10.17487/RFC6943, May 2013, <https://www.rfc-editor.org/info/rfc6943>.

[RFC6943]Thaler,D.,Ed.,“出于安全目的的标识符比较问题”,RFC 6943,DOI 10.17487/RFC6943,2013年5月<https://www.rfc-editor.org/info/rfc6943>.

[RFC7564] Saint-Andre, P. and M. Blanchet, "PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols", RFC 7564, DOI 10.17487/RFC7564, May 2015, <https://www.rfc-editor.org/info/rfc7564>.

[RFC7564]Saint Andre,P.和M.Blanchet,“PRECIS框架:应用协议中国际化字符串的准备、实施和比较”,RFC 7564,DOI 10.17487/RFC7564,2015年5月<https://www.rfc-editor.org/info/rfc7564>.

[RFC7622] Saint-Andre, P., "Extensible Messaging and Presence Protocol (XMPP): Address Format", RFC 7622, DOI 10.17487/RFC7622, September 2015, <https://www.rfc-editor.org/info/rfc7622>.

[RFC7622]Saint Andre,P.,“可扩展消息和状态协议(XMPP):地址格式”,RFC 7622,DOI 10.17487/RFC7622,2015年9月<https://www.rfc-editor.org/info/rfc7622>.

[RFC7790] Yoneya, Y. and T. Nemoto, "Mapping Characters for Classes of the Preparation, Enforcement, and Comparison of Internationalized Strings (PRECIS)", RFC 7790, DOI 10.17487/RFC7790, February 2016, <https://www.rfc-editor.org/info/rfc7790>.

[RFC7790]Yoneya,Y.和T.Nemoto,“国际化字符串(PRECIS)的准备、实施和比较类的映射字符”,RFC 7790,DOI 10.17487/RFC7790,2016年2月<https://www.rfc-editor.org/info/rfc7790>.

[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.

[RFC8126]Cotton,M.,Leiba,B.,和T.Narten,“在RFC中编写IANA考虑事项部分的指南”,BCP 26,RFC 8126,DOI 10.17487/RFC8126,2017年6月<https://www.rfc-editor.org/info/rfc8126>.

[RFC8265] Saint-Andre, P. and A. Melnikov, "Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords", RFC 8265, DOI 10.17487/RFC8265, October 2017, <https://www.rfc-editor.org/info/rfc8265>.

[RFC8265]Saint Andre,P.和A.Melnikov,“代表用户名和密码的国际化字符串的准备、实施和比较”,RFC 8265,DOI 10.17487/RFC8265,2017年10月<https://www.rfc-editor.org/info/rfc8265>.

[RFC8266] Saint-Andre, P., "Preparation, Enforcement, and Comparison of Internationalized Strings Representing Nicknames", RFC 8266, DOI 10.17487/RFC8266, October 2017, <https://www.rfc-editor.org/info/rfc8266>.

[RFC8266]Saint Andre,P.,“代表昵称的国际化字符串的准备、实施和比较”,RFC 8266,DOI 10.17487/RFC8266,2017年10月<https://www.rfc-editor.org/info/rfc8266>.

[UAX11] Unicode Standard Annex #11, "East Asian Width", edited by Ken Lunde. An integral part of The Unicode Standard, <http://unicode.org/reports/tr11/>.

[UAX11]Unicode标准附件#11,“东亚宽度”,Ken Lunde编辑。Unicode标准不可分割的一部分<http://unicode.org/reports/tr11/>.

[UAX15] Unicode Standard Annex #15, "Unicode Normalization Forms", edited by Mark Davis and Ken Whistler. An integral part of The Unicode Standard, <http://unicode.org/reports/tr15/>.

[UAX15]Unicode标准附件#15,“Unicode规范化表单”,由Mark Davis和Ken Whistler编辑。Unicode标准不可分割的一部分<http://unicode.org/reports/tr15/>.

[UAX9] Unicode Standard Annex #9, "Unicode Bidirectional Algorithm", edited by Mark Davis, Aharon Lanin, and Andrew Glass. An integral part of The Unicode Standard, <http://unicode.org/reports/tr9/>.

[UAX9]Unicode标准附录9,“Unicode双向算法”,由Mark Davis、Aharon Lanin和Andrew Glass编辑。Unicode标准不可分割的一部分<http://unicode.org/reports/tr9/>.

[UTR36] Unicode Technical Report #36, "Unicode Security Considerations", edited by Mark Davis and Michel Suignard, <http://unicode.org/reports/tr36/>.

[UTR36]Unicode技术报告#36,“Unicode安全注意事项”,由Mark Davis和Michel Suignard编辑<http://unicode.org/reports/tr36/>.

[UTS39] Unicode Technical Standard #39, "Unicode Security Mechanisms", edited by Mark Davis and Michel Suignard, <http://unicode.org/reports/tr39/>.

[UTS39]Unicode技术标准#39,“Unicode安全机制”,由Mark Davis和Michel Suignard编辑<http://unicode.org/reports/tr39/>.

Appendix A. Changes from RFC 7564
附录A.对RFC 7564的变更

The following changes were made from [RFC7564].

对[RFC7564]进行了以下更改。

o Recommended the Unicode toLowerCase() operation over the Unicode toCaseFold() operation in most PRECIS applications.

o 在大多数PRECIS应用程序中,建议使用Unicode toLowerCase()操作,而不是Unicode toCaseFold()操作。

o Clarified the meaning of "preparation", and described the motivation for including it in PRECIS.

o 阐明了“准备”的含义,并描述了将其纳入PRECIS的动机。

o Updated references.

o 更新参考资料。

See [RFC7564] for a description of the differences from [RFC3454].

有关与[RFC3454]的差异说明,请参见[RFC7564]。

Acknowledgements

致谢

Thanks to Martin Duerst, William Fisher, John Klensin, Christian Schudt, and Sam Whited for their feedback. Thanks to Sam Whited also for submitting [Err4568].

感谢Martin Duerst、William Fisher、John Klesins、Christian Schudt和Sam White的反馈。感谢Sam Whited也提交了[Err4568]。

See [RFC7564] for acknowledgements related to the specification that this document supersedes.

参见[RFC7564]了解与本文件所取代规范相关的确认。

Some algorithms and textual descriptions have been borrowed from [RFC5892]. Some text regarding security has been borrowed from [RFC5890], [RFC8265], and [RFC7622].

从[RFC5892]中借用了一些算法和文本描述。有关安全性的一些文本已从[RFC5890]、[RFC8265]和[RFC7622]中借用。

Authors' Addresses

作者地址

Peter Saint-Andre Jabber.org P.O. Box 787 Parker, CO 80134 United States of America

Peter Saint Andre Jabber.org美国科罗拉多州帕克787号邮政信箱80134

   Phone: +1 720 256 6756
   Email: stpeter@jabber.org
   URI:   https://www.jabber.org/
        
   Phone: +1 720 256 6756
   Email: stpeter@jabber.org
   URI:   https://www.jabber.org/
        

Marc Blanchet Viagenie 246 Aberdeen Québec, QC G1R 2E1 Canada

Marc Blanchet Viagenie 246加拿大魁北克省阿伯丁市QC G1R 2E1

   Email: Marc.Blanchet@viagenie.ca
   URI:   http://www.viagenie.ca/
        
   Email: Marc.Blanchet@viagenie.ca
   URI:   http://www.viagenie.ca/