我punycode
在我的 Angular 项目中使用 npm 模块。VsCode 告诉我它已被弃用,并且https://nodejs.org/api/punycode.html#punycode_punycode
确认:
Node.js 中捆绑的 punycode 模块版本已被弃用。在 Node.js 的未来主要版本中,该模块将被删除。当前依赖 punycode 模块的用户应改用用户区提供的 Punycode.js 模块。
建议切换到“用户提供的”模块。那是什么?
有一个指向https://github.com/mathiasbynens/punycode.js的链接,我尝试将其包含在我的 package.json 中而不是“punycode”中,但出现了相同的错误。
我需要将punycode转换NIATO-OTABD
为nñiñatoñ
.
前几天我在JavaScript中找到了一个文本转换器,但是如果中间有一个破折号,则punycode转换不起作用.
有任何修复"破折号"问题的建议吗?
我正在尝试使用Amazon SDK for .NET和SES发送电子邮件.我有一封包含特殊字母的电子邮件,例如:
ęxąmplę@źćż.com
对于域部分,我读到有关Punycode的方法,并且工作正常.但对于地址的本地部分,我似乎无法找到解决方案:我尝试使用RFC 2047编码整个电子邮件,但随后SES返回'缺少最终@域'错误,所以我尝试只编码一个本地部分,所以电子邮件将是
=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=@punycodeemail.com
Run Code Online (Sandbox Code Playgroud)
但这似乎也不起作用.有人成功地解决了这个问题吗?
首先要做的事情:
在我将每个域名转换为IDNA版本之后,我将多个域存储到数据库中.我需要知道这样一个IDNA转换域名的最大长度,以便我可以定义数据库字段的最大长度.
已知事实:
现在,我知道域名(包括任何子域)中的最大字符数为255个字符.
我输了的地方:
乍一看这很容易,但是......这是否意味着国际字符的常规ascii字符(想想UTF-8编码)?
举个例子:当我忽略"ü"是一个需要更多字节来表示的国际字符时,域"müller.de"有9个字符."müller.de"的IDNA版本是"xn--mller-kva.de",有16个字符.这表明最大长度肯定存在差异,具体取决于"if"是否转换为IDNA.
根据它们的含义,最多255个字符可以是国际字符版本,IDNA转换版本,甚至两者.
这就是我失去它的地方......特别是,因为我必须考虑到并非所有领域都是理智的,像"öüßüöäéèê.example.äöüßüöäéèê-äöüßüöäéèê.test.äöüßüöäéèê.com"这样的东西,更糟糕的是被期望.
因此,"猜测"和"希望最好"不是一种选择.我需要确定...
问题是:
基于已知的事实,即域名(包括任何子域)中的最大字符数是255个字符... IDNA转换的域名的最大长度是多少?
或者他们是否意味着IDNA转换版本(punycode)也限制为255个字符(这意味着具有国际/ unicode字符的域实际上在其unicode表示中具有更短的限制,因为他们的IDNA转换版本将必须尊重255个字符限制)?
我正在尝试解析传入的字符串以确定它是否包含任何非emojis.
我已经阅读了Mathias的这篇精彩文章,并且正在利用本机punycode
编码/解码和regenerate
正则表达式生成.我也在用EmojiData来获取我的表情符号字典.
尽管如此,某些表情符号仍然是讨厌的小虫子并拒绝匹配.对于某些表情符号,我继续获得一对代码点.
// Example of a single code point:
console.log(punycode.ucs2.decode(''));
>> [ 128169 ]
// Example of a paired code point:
console.log(punycode.ucs2.decode('??'));
>> [ 8987, 65039 ]
Run Code Online (Sandbox Code Playgroud)
Mathias在他的文章中触及了这一点(并给出了一个解决这个问题的punycode的例子)但是即使使用他的例子我得到的答案也是错误的:
function countSymbols(string) {
return punycode.ucs2.decode(string).length;
}
console.log(countSymbols(''));
>> 1
console.log(countSymbols('??'));
>> 2
Run Code Online (Sandbox Code Playgroud)
检测字符串是否包含所有表情符号的最佳方法是什么?这是为了概念验证,因此解决方案可以根据需要进行强力实施.
---更新---
上面我讨厌的表情符号的更多背景.
这些在视觉上是相同的,但实际上是不同的unicode值(第二个来自上面的例子):
? // \u231b
?? // \u231b\ufe0f
Run Code Online (Sandbox Code Playgroud)
第一个很好,第二个不好.不幸的是,第二个版本是iOS似乎使用的(如果你从iMessage复制和粘贴你获得第二个版本,当从Twilio接收文本时,同样的事情).
问题是:我使用的是第三方电子邮件递送服务,该服务不接受名称部分中包含非ASCII字符的邮件地址,例如müller@example.com.
用Punycode编码这样的地址:
http://en.wikipedia.org/wiki/Punycode
产生这个地址:
xn--mller-kva@example.com
通过该服务向其发送邮件似乎有效.
但是,我不确定是否有人无法直接注册"xn--mller-kva@example.com",因此接收的电子邮件意为"müller@example.com".
这可能会发生冲突吗?这个问题还有其他解决方案吗?
UPDATE
谢谢你的回答.以下是我们学到的内容摘要:
vs code 终端显示弃用警告
(节点:22063)[DEP0040] DeprecationWarning:该punycode
模块已弃用。请改用用户态替代方案。(用于node --trace-deprecation ...
显示警告的创建位置)
这就是问题所在。我的操作系统是 ubuntu 22.04。当我尝试将数据库与猫鼬一起使用时,问题就出现了。punycode 可以在我的 package-lock.json 文件中的某个位置看到。我自己没用过,是node自带的。
我的节点版本是 v21.0.0 ,我将其降级为 v20.9.0 然后 v18.18.0 仍然有警告。我安装了用户层模块但没有任何反应。
我理解的问题是 punycode 已被弃用,需要使用用户态替代 punycode.js 。但我不知道如何使其成为可能。
我正在尝试使用WebClient在西里尔字段上执行授权.授权经过几个阶段,在正常域和punicode域之间进行重定向.问题是HttpWebRequest无法在指定的CookieContaier中存储cookie,如果它是由punycode域设置的.例如,此代码将抛出CookieException.
var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai");
var container = new CookieContainer().Add(cookie);
Run Code Online (Sandbox Code Playgroud)
将cookie重定向设置到另一个页面的响应加剧了这个问题,即在执行WebClient.UploadValues(...)之后,WebClient.ResponseHeaders中没有cookie信息.
以下是正常的授权过程(使用浏览器)
Method Result Received Type URL RedirectURL Set-Cookie
POST 302 1,18 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/login http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin sess_id=.......; expires=Mon, 06-Jun-2016 07:20:57 GMT; Max-Age=31536000; path=/; domain=.xn----7sbcca6bi0ak9b0a6f.xn--p1ai; httponly
GET 302 722 text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin /admin/orders
GET 200 200,00 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/orders
Run Code Online (Sandbox Code Playgroud)
有没有解决方法?
我正在尝试从数据库将联系人添加到Sendgrid ,该数据库偶尔会将用户电子邮件存储在punycode example-email@xn--yaho-sqa.com
中,该代码会转换example-email@yah\xc3\xb3o.com
为 Unicode。
无论如何,如果我尝试添加ascii版本,则会出现错误,因为sendgrid不接受它 - 但它确实接受 Unicode 版本。
\n那么有没有办法在Python中将它们转换。
\n所以我认为长话短说有没有办法将punycode解码为 Unicode?
\n编辑
\n正如评论中所建议的,我尝试\n'example-email@yah\xc3\xb3o.com'.encode('punycode').decode()
返回example-email@yaho.com-cgc
,所以这在Python之外是不正确的,所以不是一个有效的解决方案。
提前致谢。
\nCan I use non latin characters in my robots.txt file and sitemap.xml like this?
robots.txt
User-agent: *
Disallow: /somefolder/
Sitemap: http://www.domainwithåäö.com/sitemap.xml
Run Code Online (Sandbox Code Playgroud)
sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://www.domainwithåäö.com/</loc></url>
<url><loc>http://www.domainwithåäö.com/subpage1</loc></url>
<url><loc>http://www.domainwithåäö.com/subpage2</loc></url>
</urlset>
Run Code Online (Sandbox Code Playgroud)
Or should I do like this?
robots.txt
User-agent: *
Disallow: /somefolder/
Sitemap: http://www.xn--domainwith-z5al6t.com/sitemap.xml
Run Code Online (Sandbox Code Playgroud)
sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://www.xn--domainwith-z5al6t.com/</loc></url>
<url><loc>http://www.xn--domainwith-z5al6t.com/subpage1</loc></url>
<url><loc>http://www.xn--domainwith-z5al6t.com/subpage2</loc></url>
</urlset>
Run Code Online (Sandbox Code Playgroud)