Ben sunucu üzerinde bazı dosyaların isimlerini ouputs bir PHP komut dosyası (bir Linux sunucu üzerinde çalışan) var. Bu basit bir salt metin biçiminde bu dosya adlarını verir.
Bu çıkış HttpWebRequest HttpWebResponse kullanarak bir program VB.NET okuma ve StreamReader edilir.
Sorun dosya adları çıktı olmanın bazı ... sıradışı karakterleri içeren olmasıdır. Özellikle, "Bölüm" sembolü (§).
Ben bir web tarayıcısında PHP komut dosyası çıkışını görüntülemek, sembol ince görünür.
Benim. NET programına PHP komut dosyası çıkışını okuduğumda, sembol (bu genel bir "blok" sembolü olarak görünür) doğru görünmüyor.
Ben (HttpWebResponse itibaren) yanıt akışı okurken kullanabileceğiniz tüm farklı karakter kodlama seçenekleri denedim. Ben bir TextBox (hiçbir iyi) görüntüleyerek, bir metin dosyası (iyi) doğrudan akışı çıktısı denedim, ve Visual Studio debugger doğrudan sonuçlarını görüntülerken bile, karakter gibi yerine bir blok olarak görünür "Bölüm" sembolü.
Ilgili bir soru önerdiği gibi "how do you troubleshoot character encoding problems.", (Bir onaltılık editörü çıktı muayene ettik
Ben. NET kendisinden bölüm sembolü (§) yazdığınızda, onu temsil görmek altıgen byte (bu unicode eğer mantıklı, değil mi? Iki bayt gerektirir?) "A7 c2" vardır. Iki yerine üç bayt - Ben doğrudan bir dosyaya PHP script çıktı yazmak ve bir hex editör ile bu incelediğinizde, sembol "ef bf bd" olarak gösterir?
Ben ne gibi bir kayıp değilim - Ben bu konuda belirgin bir şey eksik ise diğer bazı karakter kodlaması belirtmek, ya da gerekiyorsa.
İşte (bu yüzden bu sitede düzgün görünmesini modifiye VB-tarzı yorum) PHP komut çıktısını almak için kullanılan kod:
Dim myRequest As HttpWebRequest = WebRequest.Create("http://www.example.com/sample.php")
Dim myResponse As HttpWebResponse = myRequest.GetResponse()
// read the response stream
Dim myReader As New StreamReader(myResponse.GetResponseStream())
// read the entire output in one block (just as an example)
Dim theOutput as String = myReader.ReadToEnd()
Herhangi bir fikir?
- Ben StreamReader yanlış tür kullanarak muyum? (Ben yeni StreamReader oluşturmak için çağrı karakter kodlamasını geçen denedim - Ben System.Text.Encoding olan tüm olanları denedim - UTF-8, UTF-7, ASCII, UTF-32, Unicode, vs)
- Ben PHP komut dosyası çıkışını okumak için farklı bir yöntem kullanıyor olmalıdır?
- Metin çıktısı zaman PHP tarafında farklı yapıyor olması gereken bir şey var mı?
UPDATED INFO:
utf8_encode($file);
: PHP çıkışı özellikle arayarak UTF-8 kodlanmış- Ben. NET sembolü dışarı yazdığımda, kopyalanan ve Windows Karakter Haritası app sembolü yapıştırılan. Ben de kopyalanan & (Windows) dosyanın adını ve bu web sayfası kendisinden doğrudan yapıştırılan - (c2 A7) yazılır hepsi aynı onaltılık değerini vermiştir.
- Evet, ben bahsediyorum "bölümünde sembolü" (Karakter Haritası göre Windows ALT 0167) U 00 A7.
- Içerik türü PHP script başında
header('Content-Type: text/html; charset=utf-8');
sağ aracılığıyla açıkça ayarlanır.
UPDATE:
Kendim anladım, ama ben cevap insanların yardımı olmadan bunu yapamazdım. Teşekkür ederiz!