Meteor 服务器unicode通道问题

Meteor 服务器unicode通道问题

当尝试订阅名为“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/

相关内容