天道酬勤,学无止境

将 À 等特殊字符与常规 A 进行比较(compare special characters like À with regular A)

问题

在某些语言中,有像À这样的字母,我看到对于表视图部分,原生 iOS 将À放在与A相同的部分下。
我想做同样的事情,我通过比较第一个字母来构建我的部分,所以我需要À将等于 A。
我尝试使用localizedCompare但我仍然不知道这两个是相等的。

有没有办法进行这种比较? 或归一化À所以它会是A

回答1

不要按照其他答案进行转换或转换。 首先,尝试-[NSString localizedStandardCompare:] 。 如果这不能满足您的要求, NSDiacriticInsensitiveSearch选项中的NSDiacriticInsensitiveSearch传递给NSString比较方法之一(例如-compare:options:range:locale: )。 您可能还想使用其他选项,例如NSCaseInsensitiveSearch

回答2

您可以先将其转换为常规字母,然后再进行比较。

NSString *originalStr = @"À béautiful day";
NSData *d = [originalStr dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *converted = [[NSString alloc] initWithData:d encoding:NSASCIIStringEncoding];
回答3

这是 NSHipser http://nshipster.com/cfstringtransform/ 上关于CFStringTransform的一篇很棒的文章

接下来,应用 kCFStringTransformStripCombiningMarks 转换以删除任何变音符号或重音符号。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 我如何 preg_replace 特殊字符,如“Prêt-à-porter”?(How can I preg_replace special character like 'Prêt-à-porter'?)
    问题 在这个论坛和一般的网络上有很多关于这个的问题。 但我不只是明白。 这是我的代码: function updateGuideKeywords($dal) { $pattern = "/[^a-zA-Z-êàé]/"; $keywords = preg_replace($pattern, '', $_POST['keywords']); echo json_encode($keywords); } 现在,输入是Prêt-à-porter ,输出是"Pr\u00eat-\u00e0-porter" 。 为什么我得到 '\u00e' ? 以及如何更改我的模式以包含字符ê 、 à和é ? 编辑嗯...因为它看起来像一个 unicode/字符问题,我可能会去寻找我在这个页面上找到的解决方案。 在这里,他们建议做这样的事情: $chain="prêt-à-porter"; $pattern = array("'é'", "'è'", "'ë'", "'ê'", "'É'", "'È'", "'Ë'", "'Ê'", "'á'", "'à'", "'ä'", "'â'", "'å'", "'Á'", "'À'", "'Ä'", "'Â'", "'Å'", "'ó'", "'ò'", "'ö'", "'ô'", "'Ó'", "'Ò'", "'Ö'", "'Ô'", "'í'", "'ì'"
  • PHP替换了à-> a,è-> e等特殊字符(PHP replacing special characters like à->a, è->e)
    问题 我有php文档signup.php,它将内容从form(在form.php文档中)保存到MySQL基础。 当我要重新格式化输入内容时会出现问题。 我想解码à-> a这样的UTF-8字符。 $first_name=$_POST['first_name']; $last_name=$_POST['last_name']; $course=$_POST['course']; $chain="prêt-à-porter"; $pattern = array("'é'", "'è'", "'ë'", "'ê'", "'É'", "'È'", "'Ë'", "'Ê'", "'á'", "'à'", "'ä'", "'â'", "'å'", "'Á'", "'À'", "'Ä'", "'Â'", "'Å'", "'ó'", "'ò'", "'ö'", "'ô'", "'Ó'", "'Ò'", "'Ö'", "'Ô'", "'í'", "'ì'", "'ï'", "'î'", "'Í'", "'Ì'", "'Ï'", "'Î'", "'ú'", "'ù'", "'ü'", "'û'", "'Ú'", "'Ù'", "'Ü'", "'Û'", "'ý'", "'ÿ'", "'Ý'", "'ø'", "'Ø'", "'œ'", "'Œ'", "'Æ'", "'ç'", "'Ç'");
  • 字符串与C#中的特殊字符进行比较(String compare with special characters in C#)
    问题 我有两个字符串“ CZSczs ”-“ ČŽŠčžš ”,比较字符串时我想返回true。 我尝试了字符串比较,但是没有用。 回答1 您可以使用 int result string.Compare("CZSczs", "ČŽŠčžš", CultureInfo.InvariantCulture, CompareOptions.IgnoreNonSpace); bool equal = result == 0; 正如该问题的公认答案中所指出的那样。 回答2 您需要指定文化: using System; public class Program { public static void Main() { string string1 = "CZSczs"; string string2 = "ČŽŠčžš"; if(String.Compare(string1, string2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0) { Console.WriteLine("same"); } else { Console.WriteLine("not same"); } } } 请参阅以下工作代码:DotNetFiddle
  • 通过正则表达式仅允许字母和“特殊”字母(éèà等)(Allow only letters and “special” letters (éèà etc.) through a regex)
    问题 我正在尝试匹配一个字符串,以查看它是否仅由字母组成。 应允许使用各种字母。 因此,典型的a-zA-Z ,还有áàéèó...等。 我尝试将其与以下正则表达式匹配: ([\S])* 但这还允许使用\/<>*()...等字符。这些显然是不属于名称的字符。 当我只允许字母和“特殊”字母时,正则表达式如何? 回答1 您可以使用准确说明以下内容的字符类: \p{L} 所以正则表达式 ^\p{L}+$ 如果字符串仅包含字母,则将匹配。 如果您希望组合字符,那么 ^(\p{L}\p{M}*)+$ 作品。 快速PowerShell测试: PS> 'foo','bär','a.b','&^#&%','123','кошка' -match '^\p{L}+$' foo bär кошка 回答2 对于非REGEX解决方案,可以使用char.IsLetter Char.IsLetter方法 指示是否将指定的Unicode字符归类为字母。 string str = "Abcáàéèó"; bool result = str.All(char.IsLetter); 这将导致数字和\/<>*()等false结果。
  • 在 MySQL DB 中存储特殊字符的正确 PHP 方法(Correct PHP method to store special chars in MySQL DB)
    问题 使用PHP,最好的方法是在MSQUL数据库中存储特殊字符(如下所示),以避免注入。 « " ' é à ù 我现在是这样的: $book_text=$_POST['book_text']; $book_text=htmlentities($book_text, "ENT_QUOTES"); $query=//DB query to insert the text 然后: $query=//DB query to select the text $fetch=//The fetch of $book_text $book_text=html_entity_decode($book_text); 这样,我所有的文本都被格式化为 HTML 实体。 但我认为这会占用大量的数据库空间。 那么,有没有更好的方法呢? 回答1 使用utf8编码存储这些值。 为避免注入,请使用mysql_real_escape_string() (或准备好的语句)。 为了防止XSS,请使用htmlspecialchars 。 回答2 听起来您的问题可以推广到使用 PHP 和 MySQL 处理和存储 UTF8。 为了避免 SQL 注入,您应该使用准备好的语句。 mysqli 和 PDO 驱动程序都支持它们。 驱动程序会自动引用准备好的语句,因此您无需担心这一点。 您的数据库表应使用字符集utf8和utf8
  • 删除特殊字符VBA Excel(Removing special characters VBA Excel)
    问题 我正在使用VBA读取一些标题,然后将该信息复制到PowerPoint演示文稿中。 我的问题是,标题有特殊字符,但是我也要处理的图像文件却没有。 TITLE构成将JPEG加载到图片容器的路径的一部分。 例如“ P k.jpg”,但标题称为“ pk”。 我希望能够忽略TITLE中的特殊字符,而只是让它看到一个空格,以便它拾取正确的JPG文件。 那可能吗? 谢谢! 回答1 您如何看待“特殊”字符,只是简单的标点符号? 您应该能够使用Replace函数: Replace("pk","."," ") 。 Sub Test() Dim myString as String Dim newString as String myString = "p.k" newString = replace(myString, ".", " ") MsgBox newString End Sub 如果您有多个字符,则可以在自定义函数或一系列简单的Replace函数链等中执行此操作。 Sub Test() Dim myString as String Dim newString as String myString = "!p.k" newString = Replace(Replace(myString, ".", " "), "!", " ") '## OR, if it is easier for
  • 使用RegExp删除所有特殊字符(Remove all special characters with RegExp)
    问题 我想要一个RegExp,它将从字符串中删除所有特殊字符。 我正在尝试类似的方法,但是它在IE7中不起作用,尽管它在Firefox中有效。 var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,."; for (var i = 0; i < specialChars.length; i++) { stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), ""); } RegExp的详细描述也将有所帮助。 回答1 var desired = stringToReplace.replace(/[^\w\s]/gi, '') 正如评论中提到的,将其作为白名单更容易-替换安全列表中不存在的字符。 插入符号( ^ )字符集的否定[...] gi说,全球性和不区分大小写(后者是有点多余,但我想提一提它),在这个例子中,安全列表是数字,单词字符,下划线( \w )和空格( \s )。 回答2 请注意,如果您仍要排除包括斜杠和特殊字符之类的集合,则可以执行以下操作: var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '')
  • 将特殊字符转换为Javascript中的HTML(Convert special characters to HTML in Javascript)
    问题 有谁知道如何将特殊字符转换为Javascript HTML吗? 例子: & ( & )变为&amp 。 未设置ENT_NOQUOTES时, " (双引号)变为&quot 。 仅当ENT_QUOTES时, ' (单引号)才变为&#039 。 < (小于)变为&lt 。 > (大于)变为&gt 。 回答1 您需要一个功能类似于 return mystring.replace(/&/g, "&").replace(/>/g, ">").replace(/</g, "<").replace(/"/g, """); 但要考虑到您希望对单引号/双引号进行不同处理。 回答2 我认为最好的方法是使用浏览器的内置HTML转义功能来处理许多情况。 为此,只需在DOM树中创建一个元素,然后将该元素的innerText设置为您的字符串。 然后检索元素的innerHTML 。 浏览器将返回HTML编码的字符串。 function HtmlEncode(s) { var el = document.createElement("div"); el.innerText = el.textContent = s; s = el.innerHTML; return s; } 测试运行: alert(HtmlEncode('&;\'><"')); 输出: &;'><" Prototype
  • 在C#中记录击键时键入特殊字符时显示的双字符(Double characters shown when typing special characters while logging keystrokes in c#)
    问题 我有一个应用程序,登录任何用户按下,但是当我按下特殊字符,例如´有a ,拿到á ,我得到´´a ; 当我想获取à ,同样的事情得到了``a ,因此所有特殊字符都要键入两次,然后再键入常规字符。 我已经搜寻了一次,却找不到真正的东西。 但是我注意到问题出在ToAscii方法中,没有正确键入字符。 public string GetString(IntPtr lParam, int vCode) { try { bool shift = Keys.Shift == Control.ModifierKeys || Console.CapsLock; string value = ""; KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure( lParam, typeof(KeyboardHookStruct)); byte[] keyState = new byte[256]; byte[] inBuffer = new byte[2]; DllClass.GetKeyboardState(keyState); var ascii= DllClass.ToAscii( MyKeyboardHookStruct.vkCode, MyKeyboardHookStruct
  • 使用sql参数在SQL LIKE语句中转义特殊字符(Escaping special characters in a SQL LIKE statement using sql parameters)
    问题 我有一张桌子,上面放着产品。 我需要进行查询,以找到所有与用户输入值匹配的结果。 我正在使用SqlParameter插入输入。 SqlCommand findProcutsByPattern = new SqlCommand( "SELECT *" + " FROM [Products]" + " WHERE ProductName LIKE @pattern", connection); findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%'); 当用户输入字符串包含“ _”或“%”时,就会出现问题,因为它们被解释为特殊字符。 另一方面,请考虑以下因素: 命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证。 与命令文本不同,参数输入被视为文字值,而不是可执行代码。 我不应该有这样的问题。 我是否需要替换/转义输入字符串中的所有“ _”和“%”,还是有一个更优雅的解决方案? 我希望将输入视为文字。 我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N \ EW,N%EW,N” EW,N'EW)。将\ , “和”指定为输入效果很好(考虑它们作为文字)。 回答1 您有两种选择: 将它们包含在[和] 。 所以: where pattern like '[%]'
  • 正则表达式仅匹配字母(Regex to match only letters)
    问题 如何编写仅与字母匹配的正则表达式? 回答1 使用字符集: [a-zA-Z]匹配A–Z中的一个小写字母和大写字母。 [a-zA-Z]+匹配一个或多个字母, ^[a-zA-Z]+$仅匹配仅包含一个或多个字母的字符串( ^和$标记字符串的开头和结尾)。 如果要匹配A–Z以外的其他字母,则可以将它们添加到字符集中: [a-zA-ZäöüßÄÖÜ] 。 或者,您可以使用预定义的字符类,例如Unicode字符属性类\p{L} ,它描述字母的Unicode字符。 回答2 如果您对拉丁字母以外的字母感兴趣,那么\p{L}匹配Unicode字母的任何内容 回答3 根据您对“字符”的含义: [A-Za-z] -所有字母(大写和小写) [^0-9] -所有非数字字符 回答4 最接近的可用选项是 [\u\l]+ 匹配一系列大写和小写字母。 但是,并非所有编辑器/语言都支持它,因此使用起来可能更安全 [a-zA-Z]+ 如其他用户所建议 回答5 你会用 /[a-z]/gi []-检查给定输入之间的任何字符 az--覆盖整个字母 g -----遍及整个字符串 i ----获取大写和小写 回答6 Java的: String s= "abcdef"; if(s.matches("[a-zA-Z]+")){ System.out.println("string only contains letters")
  • 从字符串中删除所有特殊字符[重复](Remove all special characters from a string [duplicate])
    问题 这个问题已经在这里有了答案: 仅使用单连字符定界符将字符串转换为段符(9个答案) 去年关闭。 我面临网址问题,我希望能够转换标题,该标题可以包含任何内容,并去除所有特殊字符,因此它们仅包含字母和数字,当然我想用连字符替换空格。 怎么办呢? 我听说过很多关于正则表达式(regex)的使用... 回答1 这应该可以满足您的需求: function clean($string) { $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. } 用法: echo clean('a|"bc!@£de^&$f g'); 将输出: abcdef-g 编辑: 嘿,只是一个简单的问题,如何防止多个连字符彼此相邻? 并将它们替换为1吗? function clean($string) { $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. $string = preg_replace('/[^A-Za-z0-9\-]/', '',
  • 从字符串中删除特殊字符的最有效方法(Most efficient way to remove special characters from string)
    问题 我想从字符串中删除所有特殊字符。 允许的字符是AZ(大写或小写),数字(0-9),下划线(_)或点号(。)。 我有以下内容,它可以工作,但是我怀疑(我知道!)它不是很有效: public static string RemoveSpecialCharacters(string str) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.Length; i++) { if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'z' || (str[i] == '.' || str[i] == '_'))) { sb.Append(str[i]); } } return sb.ToString(); } 最有效的方法是什么? 正则表达式会是什么样子,与普通的字符串操作相比如何? 将要清理的字符串会很短,通常长度在10到30个字符之间。 回答1 为什么您认为您的方法效率不高? 实际上,这是最有效的方法之一。 您当然应该将字符读入局部变量,或者使用枚举数来减少数组访问的次数: public static string RemoveSpecialCharacters(this string str) {
  • 比较unicode字符时Javascript字符串比较失败(Javascript string comparison fails when comparing unicode characters)
    问题 我想比较JavaScript中相同的两个字符串,但是相等运算符==返回false。 一个字符串包含一个特殊字符(例如丹麦语å )。 JavaScript代码: var filenameFromJS = "Designhåndbog.pdf"; var filenameFromServer = "Designhåndbog.pdf"; print(filenameFromJS == filenameFromServer); // This prints false why? 解决方案对我有用的是slevithan指出的unicode规范化。 我使用slevithan建议的规范化库创建了一个原始的jsfiddle版本。 链接:http://jsfiddle.net/GWZ8j/1/。 回答1 与这里的其他人所说的不同,这与编码无关。 而是,您的两个字符串使用不同的代码点来呈现相同的视觉字符。 为了正确解决此问题,需要在比较两个字符串之前对它们进行Unicode归一化。 不幸的是,JavaScript没有内置此功能。这是一个可以为您执行标准化的JavaScript库:https://github.com/walling/unorm 回答2 在以下情况下,JavaScript等于运算符==似乎将失败。 在所有情况下,都是程序员错误。 不是JavaScript中的错误。
  • 将特殊字符(例如¼和ƒ)转换回其在C#中原始的拉丁字母对等字符(Converting special charactes such as ü and à back to their original, latin alphbet counterparts in C#)
    问题 我从MySQL数据库中获得了一个导出文件,该导出文件的编码似乎随着时间的推移而有些混乱,并且包含HTML char codes (如& uuml; 以及更多表示相同字母(例如ü和Ã问题字符。 我的任务是使文件具有一定的一致性,并将所有内容转换为正确的拉丁字符,例如ú和ó 。 我正在处理的字符串的一个示例是 表面消毒液 哪个应该等于 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen C#/。Net 4.5中是否有一种方法可以成功地将ü和Ã重新编码为UTF-8 ? 否则建议采用哪种方法? 上面示例字符串中的段落字符¶是实际的段落字符还是其他某些字符组合的一部分? 在需要查找和替换下面的情况下,我已经创建了一个查找表,但是我不确定它是否完整。 É -> É â€œ -> " †-> " Ç -> Ç Ãƒ -> à é, 'é à -> À ú -> ú • -> - Ø -> Ø Ãµ -> õ í -> í â -> â ã -> ã ê -> ê á -> á é -> é ó -> ó – -> – ç -> ç ª -> ª
  • 正则表达式:不是字母或数字的任何字符(Regular Expression: Any character that is NOT a letter or number)
    问题 我正在尝试找出与任何不是字母或数字的字符匹配的正则表达式。 因此,诸如(,, @,£,()等的字符... 一旦找到,我想用空格替换它。 任何建议。 回答1 要匹配字母或数字以外的任何内容,您可以尝试以下操作: [^a-zA-Z0-9] 并替换为: var str = 'dfj,dsf7lfsd .sdklfj'; str = str.replace(/[^A-Za-z0-9]/g, ' '); 回答2 此正则表达式匹配不是字母,数字或下划线( _ )字符的任何内容。 \W 例如在JavaScript中: "(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: " asdf 345345" 回答3 您正在寻找: var yourVar = '1324567890abc§$)%'; yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' '); 这将所有非字母数字字符替换为一个空格。 最后的“ g”替换所有出现的内容。 除了指定az(小写)和AZ(大写),您还可以使用区分大小写的选项: /[^a-z0-9]/gi 。 回答4 这太晚了,但是由于没有可接受的答案,所以我想提供我认为最简单的答案:\ D-匹配所有非数字字符。 var x = "123 235-25%"; x.replace(/
  • 从R中的字符串中删除所有特殊字符?(Remove all special characters from a string in R?)
    问题 如何从R中的字符串中删除所有特殊字符并将其替换为空格? 一些要删除的特殊字符是: ~!@#$%^&*(){}_+:"<>?,./;'[]-= 我已经尝试过使用[:punct:]模式的regex ,但是它只删除了标点符号。 问题2:怎么从国外的语言,如删除字符: â í ü Â á ą ę ś ć ? 答案:使用[^[:alnum:]]删除~!@#$%^&*(){}_+:"<>?,./;'[]-=并使用[^a-zA-Z0-9]还去除â í ü Â á ą ę ś ć在regex或regexpr功能。 以R为底的解决方案: x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" gsub("[[:punct:]]", "", x) # no libraries needed 回答1 您需要使用正则表达式来识别不需要的字符。 对于最易读的代码,您需要stringr包中的str_replace_all,尽管来自base R的gsub也可以正常工作。 确切的正则表达式取决于您要执行的操作。 您可以删除问题中输入的那些特定字符,但是删除所有标点符号则容易得多。 x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever str_replace_all(x, "[[:punct:]]", " ")
  • 删除变音符号(Unicode字符)(Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars)
    问题 我正在寻找一种算法,该算法可以在带有变音符号的字符(波浪号,抑扬音符,插入号,变音符,卡通)与它们的“简单”字符之间进行映射。 例如: ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ --> n á --> a ä --> a ấ --> a ṏ --> o 等等。 我想用Java做到这一点,尽管我怀疑它应该是Unicode-y,并且应该可以轻松地以任何语言进行操作。 目的:允许轻松搜索带有变音符号的单词。 例如,如果我有一个网球运动员数据库,并且输入了Björn_Borg,我还将保留Bjorn_Borg,这样,如果有人进入Bjorn而不是Björn,我就可以找到它。 回答1 我最近在Java中完成了此操作: public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+"); private static String stripDiacritics(String str) { str = Normalizer.normalize(str, Normalizer.Form.NFD); str = DIACRITICS_AND_FRIENDS.matcher(str)
  • 如何在PHP中显示特殊字符(How to display special characters in PHP)
    问题 我已经多次看到这个问题,但是分辨率不高。 我有以下字符串: $string = "<p>Résumé</p>"; 我想打印或回显字符串,但是输出将返回<p>R sum </p> 。 因此,我尝试了htmlspecialchars()或htmlentities()来输出<p>Résumé<p> 并且浏览器呈现<p>Résumé<p> 。 显然,我希望它呈现以下内容: 恢复 我正在使用UTF-8: header("Content-type: text/html; charset=UTF-8"); 我在这里想念什么? 为什么echo和print输出 表示任何特殊字符? 为了澄清,该字符串实际上是存储在数据库中的整个HTML文件。 现实世界中的应用程序不只是那条小线。 回答1 经过多次激烈的讨论之后,我对我想发布给可能遇到此问题的任何其他人的问题有了更好的理解。 虽然UTF-8字符集将在客户端上显示特殊字符,服务器,在另一方面,可能不那么包容和将打印特殊字符,例如à和è如和。 为了确保您的服务器可以正确打印它们,请使用ISO-8859-1字符集: <?php /*Just for your server-side code*/ header('Content-Type: text/html; charset=ISO-8859-1'); ?> <!DOCTYPE html> <html
  • 将字符与代码点进行比较?(Comparing a char to a code-point?)
    问题 将代码点与Java字符进行比较的“正确”方法是什么? 例如: int codepoint = String.codePointAt(0); char token = '\n'; 我知道我可以做到: if (codepoint==(int) token) { ... } 但是这段代码看起来很脆弱。 有没有比较正式的API方法codepoints到chars ,或转换char高达codepoint作比较? 回答1 背景知识:1995年Java出现时, char类型基于原始的“ Unicode 88”规范,该规范限于16位。 一年后,当Unicode 2.0实施时,替代字符的概念被引入,超出了16位的限制。 Java内部以UTF-16格式表示所有String 。 对于超过U + FFFF的代码点,代码点由代理对表示,即,两个char ,第一个为高代理代码单元(在\ uD800- \ uDBFF范围内),第二个为低-代理代码单位(范围为\ uDC00- \ uDFFF)。 从早期开始,所有基本的Character方法都是基于一个代码点可以用一个char表示的假设,因此这就是方法签名的样子。 我猜想保留向后兼容性,当Unicode 2.0出现时,向后兼容性不会改变,在处理它们时需要谨慎。 引用Java文档: 仅接受char值的方法不能支持补充字符。