Problema del canale Unicode del server Meteor


1

Quando provo ad abbonarmi a un canale chiamato "pubblico" con Meteor , un web server specializzato per push in tempo reale usando COMET , ottengo la risposta desiderata:

<script>ch("public",0)</script>

Quando la richiesta http è:

GET /push/131530959548387383/xhrinteractive/public?nc=1315309595740 HTTP/1.1

Ma quando provo ad abbonarmi a un canale chiamato in inglese ed ebraico come: "tag- קוקאין" e la richiesta http è:

GET /push/1315309516300999786/xhrinteractive/tag-%D7%A7%D7%95%D7%A7%D7%90%D7%99%D7%9F?nc=1315309516590 HTTP/1.1

Ottengo una risposta acuta - il nome del canale è diventato punti:

<script>ch("tag-............", 0);</script>

Il file che è responsabile di capire l'intestazione utilizza questa regex:

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; }
                }
            }
        }

Potrei aggiungere che Meteor è un proprio server di comete. il suo scopo è quello di inviare notifiche in tempo reale: meteorserver.org

Deve esserci una soluzione per questo da qualche parte .. Ho provato a cercare ovunque senza risultati. Sarò grato se qualcuno mi indicherà una direzione.

Risposte:


0

Sarebbe utile se ti collegassi a una pagina che descriveva cos'è Meteor: lettore RSS, applicazione, web server?

E fornire alcuni dettagli, ad esempio Meteor afferma di supportare UTF-8 e lo hai configurato per farlo? Inoltre su quale piattaforma sei, ed è un'app client o server?

Il primo carattere (% D7% A7) nel 2 ° URL fornito sopra è la codifica UTF-8 (D7 A7) di questo personaggio ebraico - probabilmente ciò che sta accadendo è che il GET viene codificato correttamente in UTF-8 (il valore predefinito per i moderni browser e app client), ma la risposta non è valida UTF-8 oppure l'applicazione client non la riconosce come UTF-8.

Aggiornamento 1 :

  • Il codice sembra Perl, che ha il supporto Unicode, ma abilitare Unicode per un'applicazione Perl non è sempre un compito semplice. Tuttavia è possibile farlo in porzioni, ad es $chandef=~/^([a-z0-9_\-\%]+)(.(r|b|h)([0-9]*))?$/i. Avere solo che regex corrisponda a una stringa alfanumerica ecc. UTF-8 - vedere il modulo Encode CPAN e gli incorporati di codifica / decodifica simili, purché si utilizzi Perl 5.8+ e preferibilmente 5.10+. Ogni volta che vedi [a-z]nel codice, è una bandiera rossa per l'internazionalizzazione e Unicode. Questo si sta trasformando in una risposta StackOverflow, quindi mi fermo qui ...
  • Non hai risposto alla mia seconda e terza domanda, ma il codice chiarisce che Meteor non supporterà UTF-8 senza alcune modifiche al codice.
  • Hai davvero bisogno di parlare con gli sviluppatori Meteor in quanto questo è abbastanza specifico per questo server, vedi http://meteorserver.org/how-to-join-in/

Grazie @RichVel per aver risposto e scusatemi per questo, ho modificato la domanda.
Tom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.