当尝试订阅名为“public”的频道时流星,一个专门用于实时推送的 Web 服务器,使用彗星,我得到了想要的回应:
<script>ch("public",0)</script>
当 http 请求为:
GET /push/131530959548387383/xhrinteractive/public?nc=1315309595740 HTTP/1.1
但是当我尝试订阅一个以英文和希伯来语命名的频道(例如:“tag-קוקאין”)时,http 请求是:
GET /push/1315309516300999786/xhrinteractive/tag-%D7%A7%D7%95%D7%A7%D7%90%D7%99%D7%9F?nc=1315309516590 HTTP/1.1
我得到了一个尴尬的回应——频道名称变成了点:
<script>ch("tag-............", 0);</script>
负责确定标题的文件使用以下正则表达式:
if($self->{'headerBuffer'}=~/GET\s+$::CONF{'SubscriberDynamicPageAddress'}\/([0-9a-z]+)\/([0-9a-z]+)\/([a-z0-9_\-\%\.\/]+).*?/i)
{
$self->{'subscriberID'}=$1;
$self->{'mode'}=$2;
my $persist=$self->getConf('Persist');
my $maxTime=$self->getConf('MaxTime');
$self->{'ConnectionTimeLimit'} = ($self->{'ConnectionStart'}+$maxTime) if ($maxTime>0);
my @channelData=split('/',$3);
my $channels={};
my $channelName;
my $offset;
foreach my $chandef (@channelData) {
if($chandef=~/^([a-z0-9_\-\%]+)(.(r|b|h)([0-9]*))?$/i) {
$channelName = $1;
$channels->{$channelName}->{'startIndex'} = undef;
if ($3) {
$offset = $4;
if ($3 eq 'r') { $channels->{$channelName}->{'startIndex'} = $offset; }
if ($3 eq 'b') { $channels->{$channelName}->{'startIndex'} = -$offset; }
if ($3 eq 'h') { $channels->{$channelName}->{'startIndex'} = 0; }
}
}
}
我想补充一点,Meteor 本身就是一个彗星服务器。它的目的是实时推送通知: 流星服务器
一定有办法解决这个问题。我试过到处搜索,但无济于事。如果有人能给我指明方向,我将不胜感激。
答案1
如果您链接到一个描述 Meteor 是什么的页面(RSS 阅读器、应用程序、Web 服务器),这是否会有所帮助?
并提供一些详细信息,例如 Meteor 是否声称支持 UTF-8,您是否已将其配置为支持 UTF-8?此外,您使用的是哪个平台,这是客户端还是服务器应用程序?
上面给出的第二个 URL 中的第一个字符 (%D7%A7) 是这个希伯来字符- 可能发生的情况是,GET 被正确地以 UTF-8 编码(现代浏览器和客户端应用程序的默认设置),但响应不是有效的 UTF-8,或者客户端应用程序无法将其识别为 UTF-8。
更新 1:
- 代码看起来像 Perl,它确实支持 Unicode,但为 Perl 应用程序启用 Unicode 并不总是一件容易的事。但是,可以分部分执行此操作,例如,只需让正则表达式
$chandef=~/^([a-z0-9_\-\%]+)(.(r|b|h)([0-9]*))?$/i
匹配 UTF-8 字母数字等字符串 - 请参阅 Encode CPAN 模块和类似的编码/解码内置函数,只要您使用的是 Perl 5.8+,最好是 5.10+。任何时候您[a-z]
在代码中看到,它都是国际化和 Unicode 的危险信号。这正在变成 StackOverflow 答案,所以我就此打住... - 您还没有回答我的第二和第三个问题,但是代码清楚地表明,如果不进行一些代码更改,Meteor 将不支持 UTF-8。
- 你确实需要与 Meteor 开发人员交谈,因为这个问题与该服务器有关,请参阅http://meteorserver.org/how-to-join-in/