天道酬勤,学无止境

在C#、. Net 4.0中解析RFC1123格式的日期(Parsing RFC1123 formatted dates in C#, .Net 4.0)

问题

我正在尝试以RFC1123格式解析日期(2010年1月21日,星期四,美国东部标准时间)。

这是我尝试过的,但是没有用:

DateTime Date = DateTime.Parse(dt);
DateTime Date = DateTime.ParseExact(dt, "r", null);
回答1

您是否尝试过类似的方法:

string dateString, format;  
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;

dateString = "Thu, 21 Jan 2010 17:47:00 EST";
format = "ddd, dd MMM yyyy hh:mm:ss EST";

result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());

我还没有测试(过一会儿)...但是我相信它将为您做到这一点。

编辑:似乎问题在于RFC1123指出时区应始终为GMT ...这就是为什么r或R不能为您提供格式的原因。 问题是EST。 上面的模式说明了EST,但它是静态的,因此,如果您有其他时区,则可能会遇到麻烦。 最好的解决方案是使用RFC1123标准并转到GMT,它应该可以解决您的问题。 如果您做不到,请告诉我可能有解决办法。

编辑2:这不是一个完整的解决方案,但是它可以隔离时区并仍然允许您解析时区。 该代码不知道要显示的时区,但是您可以在其上加上任何时区缩写,然后它将解析时间。 如果要转换为GMT,然后使用r或R,则可以获取正则表达式匹配的结果,将其放在查询表中(以查看该时区缩写的时间偏移量),然后将时间转换为GMT并从那里解析。 那将是一个很好的解决方案,但需要更多的工作。 这是代码:

string dateString, format, pattern, tz;
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
pattern = @"[a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ (?<timezone>[a-zA-Z]+)";
dateString = "Thu, 21 Jan 2010 17:47:00 EST";

Regex findTz = new Regex(pattern, RegexOptions.Compiled);

tz = findTz.Match(dateString).Result("${timezone}");

format = "ddd, dd MMM yyyy HH:mm:ss " + tz;

try
{
    result = DateTime.ParseExact(dateString, format, provider);
    Console.WriteLine("Timezone format is: {0}", format);
    Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
    Console.WriteLine("{0} is not in the correct format.", dateString);
}

    Console.ReadLine();

如果您想将其转换为时区转换器,以下是为您提供的UTC偏移量列表:

带有UTC偏移量的时区缩写

受限制的 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>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用C#和.net 3.5阅读RSS时出现问题(Problems Reading RSS with C# and .net 3.5)
    问题 我一直在尝试使用System.ServiceModel.Syndication中提供的新例程编写一些例程来读取RSS和ATOM提要,但不幸的是,Rss20FeedFormatter炸掉了我尝试的大约一半的提要,但有以下例外: An error was encountered when parsing a DateTime value in the XML. 每当RSS源以以下格式表示发布日期时,似乎就会发生这种情况: 星期四,08年10月16日14:23:26 -0700 如果供稿将发布日期表示为格林尼治标准时间,则表示一切正常: 2008年10月16日,星期四,格林尼治标准时间 如果有某种方法可以解决XMLReaderSettings的问题,那么我还没有找到它。 有人可以协助吗? 回答1 序列化pubDate和lastBuildDate等元素时,RSS 2.0格式的联合供稿源使用RFC 822日期时间规范。 不幸的是,RFC 822日期时间规范是一种非常“灵活”的语法,用于表示DateTime的时区成分。 可以以几种方式指示时区。 “ UT”是世界标准时间(以前称为“格林威治标准时间”); 允许使用“ GMT”作为世界标准时间的参考。 军事标准在每个区域使用一个字符。 “ Z”是世界标准时间。 “ A”表示提前一小时,“ M”表示提前十二小时; “ N”是一小时后,而“ Y
  • 在JAVA中解析RFC 2822日期(Parsing RFC 2822 date in JAVA)
    问题 我需要解析Java中日期的RFC 2822字符串表示形式。 示例字符串在这里: 星期六,2010年3月13日11:29:05 -0800 看起来很讨厌,所以我想确保自己做得对,以后会遇到奇怪的问题,原因可能是由于AM-PM /军事时间问题,UTC时间问题,我无法预料的问题等原因而导致日期解释错误... 谢谢! 回答1 这是完成您要求的快速代码(使用SimpleDateFormat ) String rfcDate = "Sat, 13 Mar 2010 11:29:05 -0800"; String pattern = "EEE, dd MMM yyyy HH:mm:ss Z"; SimpleDateFormat format = new SimpleDateFormat(pattern); Date javaDate = format.parse(rfcDate); //Done. PS。 我在这里没有处理异常和并发(因为解析日期时SimpleDateFormat不同步)。 回答2 如果您的应用程序使用的是英语以外的其他语言,则您可能希望通过使用备用SimpleDateFormat构造函数来强制日期解析/格式化的语言环境: String pattern = "EEE, dd MMM yyyy HH:mm:ss Z"; SimpleDateFormat format =
  • Parsing RFC1123 formatted dates in C#, .Net 4.0
    I am trying to parse dates in RFC1123 format (Thu, 21 Jan 2010 17:47:00 EST). Here is what I tried but none worked: DateTime Date = DateTime.Parse(dt); DateTime Date = DateTime.ParseExact(dt, "r", null);
  • 如何进行日期/时间比较(How to do date/time comparison)
    问题 在Go中进行日期比较是否有任何选择? 我必须根据日期和时间-独立地对数据进行排序。 因此,我可以允许一个对象在一定日期范围内发生,只要它也在一定时间范围内出现即可。 在这种模型中,我不能简单地选择最旧的日期,最年轻的时间/最新的日期,最新的时间和Unix()秒来比较它们。 我真的很感谢任何建议。 最终,我编写了一个时间解析字符串比较模块,以检查时间是否在范围内。 但是,这进展不顺利。 我有一些令人毛骨悚然的问题。 我将其发布在这里只是为了好玩,但我希望有一种更好的时间比较方法。 package main import ( "strconv" "strings" ) func tryIndex(arr []string, index int, def string) string { if index <= len(arr)-1 { return arr[index] } return def } /* * Takes two strings of format "hh:mm:ss" and compares them. * Takes a function to compare individual sections (split by ":"). * Note: strings can actually be formatted like "h", "hh", "hh:m"
  • 如何解析JSON以在JavaScript中接收Date对象?(How to parse JSON to receive a Date object in JavaScript?)
    问题 我有以下一段JSON: \/Date(1293034567877)\/ 这是此.NET代码的结果: var obj = DateTime.Now; var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); serializer.Serialize(obj).Dump(); 现在,我面临的问题是如何在JavaScript中从中创建Date对象。 我所能找到的就是令人难以置信的正则表达式解决方案(许多包含错误)。 很难相信没有完美的解决方案,因为这都是JavaScrip中的全部,我的意思是JavaScript代码试图读取应该被认为是JavaScript代码的JSON(JavaScript对象表示法),但现在看来,这并不是因为JavaScript无法在这里做好。 我还看到了一些我无法使用的评估解决方案(除了被指出为安全威胁之外)。 真的没有办法优雅地做到这一点吗? 没有实际答案的类似问题: 如何使用GWT解析ASP.NET JSON日期格式 回答1 没有日期的标准JSON表示形式。 您应该执行@jAndy建议的操作,而不要完全序列化DateTime ; 只需发送RFC 1123日期字符串ToString("r")或从Unix纪元开始的秒数
  • 在iPhone上解析JSON日期(Parsing JSON dates on IPhone)
    问题 原谅我是我不熟悉ObjectiveC。 我正在从/ Date(xxxxxxxxxxxxx-xxxx)/格式的.NET Web服务获取日期。 我正在寻找有关如何最好地将其解析为NSDate对象的方向。 我曾尝试在其上使用dateWithTimeIntervalSince1970,但它返回的日期是1969年,而我知道该日期是2006年。 寻找正确的方法来处理JSON日期的方向。 提前致谢! 回答1 作为学习Objective-C的.NET程序员,当我尝试使用.Net WebService时,我遇到了同样的问题。 起初我以为我可以使用NSDateFormatter ...我在这里找到了一个关于它的符号的很好的参考,但是我很快意识到我需要将数字从毫秒转换为秒。 我写了代码来做到这一点...我仍在学习Obj-C,但我不认为它应该这么难... - (NSDate *) getJSONDate{ NSString* header = @"/Date("; uint headerLength = [header length]; NSString* timestampString; NSScanner* scanner = [[NSScanner alloc] initWithString:self]; [scanner setScanLocation:headerLength];
  • 在Android中更改日期字符串格式(Change date string format in android)
    问题 我正在从SAX解析中获取日期字符串,如下所示:周三,2012年4月18日07:55:29 +0000 现在,我希望此字符串为: 2012年4月18日,下午01:25 我怎样才能做到这一点? 回答1 SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm a"); String date = format.format(Date.parse("Your date string")); 更新 :- 如上所示, Date.parse("Your date string"); 不推荐使用。 String strCurrentDate = "Wed, 18 Apr 2012 07:55:29 +0000"; SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss Z"); Date newDate = format.parse(strCurrentDate); format = new SimpleDateFormat("MMM dd,yyyy hh:mm a"); String date = format.format(newDate); 回答2 可以做到这一点: public static String
  • 比较JavaScript中的两个日期(Compare two dates in JavaScript)
    问题 我正在尝试比较两个日期。 我有这段代码,我认为可以用,但是没有。 现在,如果结束日期小于开始日期,我只想警告错误。 日期样式yyyy-mm-dd ,在此之前需要用于其他事件的格式保持不变。 此代码有什么问题? startdate = "2009-11-01" ; enddate = "2009-11-04" ; var d1 = new Date(startdate) var d2 = new Date(enddate) if (d2 < d1) { alert ("Error ! ) ; } document.cookie='st =' + startdate // set sytem cookie document.cookie='en =' + enddate window.location = self.location.href window.opener.location.reload() close() 回答1 最终有人使用了ISO 8601标准日期,但随后... 您正在使用JavaScript可以理解的很好的国际标准。 但事实并非如此。 问题在于您的日期是ISO 8601标准格式,内置Date.parse()无法读取。 JavaScript实现了RFC 822/1123中较旧的IETF日期。 一种解决方案是将它们调整为RFC样式,您可以在RFC1123中看到它
  • IE11中的ToLocaleDateString()更改(ToLocaleDateString() changes in IE11)
    问题 在IE 11中,ToLocaleDateString()获得了有趣的结果。 返回的字符串在浏览器中看起来不错,例如“ 1/28/2014 11:00:46 AM”,但是如果我将该值复制并粘贴到纯文本编辑器中,则它看起来像这样:“?1?/? 28?/?2014?11?:?00?:?46??AM”。 有趣的是,如果我将文本粘贴到Microsoft产品中,看起来还不错...问题是,如果您尝试以编程方式使用该值来创建日期,则该日期无效。 您可以通过仅在IE11中打开一个控制台并使用ToLocaleDateString()在其上创建一个新日期,然后尝试使用生成的字符串以javascript或您选择的语言创建一个新日期来测试这一点(我我在这里使用ASP.NET ...)。 我是在做错什么,还是应该以其他方式与javascript日期进行交互? 如何摆脱那些时髦的符号? 编辑:由于下面的评论,我能够弄清楚未显示的字符是什么,它们是从左到右的标记。 根据我将编辑器粘贴的值和编辑器设置为使用的编码,文本将以不同的方式显示:有时带有“?”,有时没有。 回答1 问题是,如果您尝试以编程方式使用该值来创建日期,则该日期无效。 ... 我是在做错什么,还是应该以其他方式与javascript日期进行交互? 是的,您做错了。 您不应该使用旨在格式化某些内容以实现特定于区域设置的人类显示的功能
  • If-Modified-Since日期格式(If-Modified-Since Date Format)
    问题 我正在编写服务器,我想检查“ If-Modified-Since:”标头。 由于日期方法太多,因此我应该考虑检查哪些方法,就像通常的方法(在浏览器中使用毫秒)。 以下是我以毫秒格式执行的操作: Date date; //dateS is a substring of If-Modified-Since: header try{ long mills = Long.parseLong(dateS); } catch (NumberFormatException e) {e.printStackTrace(); } date = new Date(mills); 我也想检查“ 2005年10月19日星期三10:50:00 GMT”格式。 如何将日期更改为毫秒? SimpleDateFormat dateFormat = new SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss z"); // to check if-modified-since time is in the above format try { ifModifiedSince = dateFormat.parse(date); ????????????????????? } catch (ParseException e1) { } 请帮助我解决以上问题
  • 如何解析日期时间并将其转换为RFC 822日期时间格式?(How do I parse and convert DateTime’s to the RFC 822 date-time format?)
    问题 如何将DateTime结构转换为其等效的RFC 822日期时间格式的字符串表示形式,并将此字符串表示形式解析回.NET中的DateTime结构? RFC-822日期时间格式用于多种规范,例如RSS联合格式。 回答1 试试这个: DateTime today = DateTime.Now; String rfc822 = today.ToString("r"); Console.WriteLine("RFC-822 date: {0}", rfc822); DateTime parsedRFC822 = DateTime.Parse(rfc822); Console.WriteLine("Date: {0}", parsedRFC822); 传递到DateTime的ToString()方法中的“ r”格式说明符实际上会产生RFC-1123格式的日期时间字符串,但也会基于RFC-822日期传递,这是基于阅读位于http://www.w3的规范。 org / Protocols / rfc822 /#z28。 我在创建RSS feed时使用了这种方法,并且它们通过基于http://validator.w3.org/feed/check.cgi上提供的验证器的验证。 缺点是,在转换中,它将日期时间转换为格林尼治标准时间。 要转换回本地时间,您需要应用本地时区偏移量。 为此
  • 设置Cookie时,指定失效日期时可以使用哪些日期格式?(Which date formats can I use when specifying the expiry date when setting a cookie?)
    问题 我正在使用设置cookie的函数。 此功能允许将cookie名称,cookie值和cookie的其他到期日期传递到其中。 function setCookie(name, value, exdate) { var c_value = escape(value) + ((exdate === null || exdate === undefined) ? "" : "; expires=" + exdate); document.cookie = name + "=" + c_value; }; 用法: setCookie("my-cookie-name","my-value","Sun, 15 Jul 2012 00:00:01 GMT"); 我已将函数与上面的日期格式一起使用,并认为它与跨浏览器兼容,因为我测试了在关闭各种浏览器并重新打开后是否仍保留cookie。 我发现使用"15 Jul 2012"类的格式时会出现问题。 在Firefox开发期间,这种格式对我有用,但是其他浏览器似乎只将cookie设置为会话cookie。 我应该坚持使用以下格式: "Sun, 15 Jul 2012 00:00:01 GMT"还是其他可以在主要浏览器(IE 7-9,Firefox,Chrome浏览器)上使用的格式? ,Opera,Safari)? 回答1 根据测试并进一步阅读
  • C#DateTime转换为“ YYYYMMDDHHMMSS”格式(C# DateTime to “YYYYMMDDHHMMSS” format)
    问题 我想将C#日期时间转换为“ YYYYMMDDHHMMSS”格式。 但是我没有找到获取这种格式的内置方法吗? 任何意见? 回答1 DateTime.Now.ToString("yyyyMMddHHmmss"); // case sensitive 回答2 这个网站有很棒的例子来看看 // create date time 2008-03-09 16:05:07.123 DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24 String.Format("{0:m mm}", dt); // "5 05" minute String.Format("{0:s ss}", dt); // "7 07" second
  • JavaScript:哪些浏览器支持使用Date.parse解析ISO-8601日期字符串(JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse)
    问题 我无法在IE8和Safari 5上解析ISO-8601日期“ 2011-04-26T13:16:50Z”,但它在Chrome 10,FF4上有效。 支持似乎参差不齐? 有谁知道哪些浏览器可以解析这种格式的实际状态? 我认为IE6和7也会失败。 var d = Date.parse("2011-04-26T13:16:50Z"); 回答1 我今天有这个问题。 我发现momentjs是在跨浏览器庄园中解析ISO 8601日期的好方法。 momentjs也可以用于以其他格式输出日期。 回答2 我说只有在需要通过一些测试时才进行填充, 这是我已经写的: (function() { var d = window.Date, regexIso8601 = /^(\d{4}|\+\d{6})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2}):(\d{2})\.(\d{1,3})(?:Z|([\-+])(\d{2}):(\d{2}))?)?)?)?$/; if (d.parse('2011-11-29T15:52:30.5') !== 1322581950500 || d.parse('2011-11-29T15:52:30.52') !== 1322581950520 || d.parse('2011-11-29T15:52:18.867') !==
  • 为什么DateTime.Parse无法解析UTC日期(Why can't DateTime.Parse parse UTC date)
    问题 为什么它不能解析此: DateTime.Parse("Tue, 1 Jan 2008 00:00:00 UTC") 回答1 无法解析该字符串,因为“ UTC”不是有效的时区指示符。 UTC时间是通过在时间字符串的末尾添加“ Z”来表示的,因此您的解析代码应如下所示: DateTime.Parse("Tue, 1 Jan 2008 00:00:00Z"); 摘自ISO 8601上的Wikipedia文章 如果时间以世界标准时间(UTC)为准,请在时间之后直接添加“ Z”,且不带空格。 “ Z”是UTC零偏移量的区域标记。 因此,“ 09:30 UTC”表示为“ 09:30Z”或“ 0930Z”。 “ 14:45:15 UTC”将是“ 14:45:15Z”或“ 144515Z”。 UTC时间也称为“祖鲁语”时间,因为“祖鲁语”是北约语音字母中的“ Z”。 回答2 假设您为日期时间使用格式“ o”,那么您就拥有“ 2016-07-24T18:47:36Z”,有一种非常简单的方法可以处理此问题。 调用DateTime.Parse("2016-07-24T18:47:36Z").ToUniversalTime() 。 当您调用DateTime.Parse("2016-07-24T18:47:36Z") ,会发生一个将DateTime设置为本地时区的情况。 因此,它将其转换为当地时间。
  • 将DateTime转换为字符串PHP(Convert DateTime to String PHP)
    问题 我已经研究了很多站点,有关如何将PHP DateTime对象转换为String。 我总是看到“从String到DateTime”而不是“从DateTime到String” 可以回显PHP DateTime,但是我想用PHP字符串函数处理DateTime。 我的问题是如何从这种代码开始使PHP dateTime Object成为字符串: $dts = new DateTime(); //this returns the current date time echo strlen($dts); 回答1 您可以使用DateTime类的format方法: $date = new DateTime('2000-01-01'); $result = $date->format('Y-m-d H:i:s'); 如果由于某种原因format失败,它将返回FALSE 。 在某些应用程序中,处理失败的情况可能很有意义: if ($result) { echo $result; } else { // format failed echo "Unknown Time"; } 回答2 我发现的最简单的方法是: $date = new DateTime(); //this returns the current date time $result = $date->format('Y-m-d-H-i
  • 日期格式yyyy-MM-ddTHH:mm:ssZ(date format yyyy-MM-ddTHH:mm:ssZ)
    问题 我认为这应该很简单,但无法获得它:( .. Z是时区。 T是长时间模式我如何以这种格式获取日期,除非使用 DateTime dt = DateTime.Now; Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ")); 在C#中 回答1 使用UTC ISO 8601(MSDN日期时间格式) Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z"); 2009-11-13T10:39:35Z Z在那是因为 如果时间以世界标准时间(UTC)为单位,请在时间之后直接添加“ Z”,且不带空格。 “ Z”是UTC零偏移量的区域标记。 因此,“ 09:30 UTC”表示为“ 09:30Z”或“ 0930Z”。 “ 14:45:15 UTC”将是“ 14:45:15Z”或“ 144515Z”。 如果要包括偏移量 int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours; string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00")); string isoformat = DateTime.Now.ToString("s") + offset
  • 通过电子邮件解析带时区的日期?(Parsing date with timezone from an email?)
    问题 我正在尝试从电子邮件中检索日期。 首先,这很容易: message = email.parser.Parser().parse(file) date = message['Date'] print date 我收到: 'Mon, 16 Nov 2009 13:32:02 +0100' 但是我需要一个不错的datetime对象,所以我使用: datetime.strptime('Mon, 16 Nov 2009 13:32:02 +0100', '%a, %d %b %Y %H:%M:%S %Z') ValueError, since %Z isn't format for +0100会引发ValueError, since %Z isn't format for +0100 。 但是我在文档中找不到时区的正确格式,只有%Z表示时区。 有人可以帮我吗? 回答1 email.utils为RFC 2822格式提供了parsedate()函数,据我所知,该函数尚未被弃用。 >>> import email.utils >>> import time >>> import datetime >>> email.utils.parsedate('Mon, 16 Nov 2009 13:32:02 +0100') (2009, 11, 16, 13, 32, 2, 0, 1, -1) >>
  • PHP中的NOW()函数(NOW() function in PHP)
    问题 是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间? 我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。 例如,返回: 2009-12-01 00:00:00 回答1 除了日期功能外: date("Y-m-d H:i:s"); 回答2 date('Y-m-d H:i:s') 在这里查看更多详细信息:http://pl.php.net/manual/en/function.date.php 回答3 使用PHP版本> = 5.4 DateTime可以做到这一点: echo (new \DateTime())->format('Y-m-d H:i:s'); 看到它的工作。 回答4 使用此功能: function getDatetimeNow() { $tz_object = new DateTimeZone('Brazil/East'); //date_default_timezone_set('Brazil/East'); $datetime = new DateTime(); $datetime->setTimezone($tz_object); return $datetime->format('Y\-m\-d\ h:i:s'); } 回答5 简短答案 $now = date_create()->format('Y-m-d H:i
  • 完全合格的域名验证(Fully qualified domain name validation)
    问题 有没有一种快速而肮脏的方法来验证是否输入了正确的FQDN? 请记住,没有DNS服务器或Internet连接,因此必须通过regex / awk / sed进行验证。 有任何想法吗? 回答1 如今,有了国际化域名和数千个(!)新TLD变得更加困难。 最简单的部分是您仍然可以在“。”上拆分组件。 您需要可注册TLD的列表。 有一个网站: https://publicsuffix.org/list/effective_tld_names.dat 您只需要检查ICANN认可的证书即可。 请注意,可注册的TLD可以包含多个组件,例如“ co.uk”。 然后是IDN和punycode。 域现在是Unicode。 例如, “ xn--nnx388a”等效于“台湾”。 顺带一提,这两个都是有效的TLD。 有关punycode转换代码,请参阅“ http://golang.org/src/pkg/net/http/cookiejar/punycode.go”。 检查每个域组件的语法也有新规则。 请参阅RFC5890,网址为http://tools.ietf.org/html/rfc5890 组件可以是A标签(仅ASCII)或Unicode。 ASCII标签要么遵循旧语法,要么以“ xn--”开头,在这种情况下,它们是Unicode字符串的punycode版本。 Unicode的规则非常复杂