SORU
9 EYLÜL 2011, Cuma


Metin veya örneğini oluşturur bytestring

İyi günler.

Ben şimdi Haskell hakkında nefret bir şey dize ile çalışmak için paketleri miktar.

İlk yerli Haskell [Char] dizeleri kullandım ama hackage kitaplıkları sonra tamamen sonsuz dönüşüm kaybetti kullanmaya başlamak için çalıştı. Her paket kendi el yapımı işini benimseyen bazı dizeleri farklı uygulama kullanmak gibi görünüyor.

Data.Text dizeleri ve OverloadedStrings uzantısı ile Şifremi yazdım ardından, işlevleri geniş bir dizi çünkü Text seçtim, ama pek çok proje ByteString tercih gibi görünüyor.< / ^ br . Birini kullanmak için neden kısa akıl verebilir mi?

PS: ByteString Text dönüştürmek için nasıl btw?

Beklenen yazın maç olamaz Veri.Örneğini oluşturur bytestring.Tembel.İç.Örneğini oluşturur bytestring olayla türüne karşıMetin Beklenen tür: IO Veri.Örneğini oluşturur bytestring.Tembel.İç.Örneğini oluşturur bytestring Olayla türü: IO Metin

Data.Text.Encoding, ama hayır şans encodeUtf8 denedim:

Beklenen yazın maç olamaz Veri.Örneğini oluşturur bytestring.Tembel.İç.Örneğini oluşturur bytestring olayla türüne karşıVeri.Örneğini oluşturur bytestring.İç.Örneğini oluşturur bytestring

UDP:

Yanıtları, *Parçalar iyiliği için teşekkürler yol gibi görünüyor, ama ben biraz sonuç, benim asıl işlevi bu gibi görünüyordu şok:

htmlToItems :: Text -> [Item]
htmlToItems =
    getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"

Ve şimdi oldu:

htmlToItems :: Text -> [Item]
htmlToItems =
    getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
    where
      toLazyBS t = fromChunks [encodeUtf8 t]
      fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t

Ve evet, bu fonksiyon çalışmıyor, çünkü onun yanlış, eğer biz kaynağı Text, eminiz bu metin düzgün kodlanmış ve hazır için kullanma ve dönüştürme şey çok aptalcaydı, ama böyle bir ayrıntılı dönüşüm hala almak zorunda hiçbir yeri dışında htmltoItems.

CEVAP
9 EYLÜL 2011, Cuma


ByteStrings ikili veri için özellikle yararlıdır, ama aynı zamanda eğer ihtiyacınız olan tüm ASCII karakter kümesi metin işlemek için etkili bir yoldur. Eğer unicode dizeleri işlemek gerekiyorsa, Text kullanmak gerekir. Ancak, vurgulamak gerekir ki, ne bir yedek için başka, onlar genellikle kullanılan için farklı şeyler: Text temsil saf unicode, hala ihtiyacımız kodlamak ve bir ikili ByteString temsil ne zaman örneğin ulaştırma metin üzerinden bir soket veya bir dosya.

Burada iyi bir makale hakkında temel unicode, iyi bir iş açıklayan ilişkinin unicode kod noktaları (Text) ve kodlanmış ikili bayt (ByteString): The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

Eğer tembel türevleri hata iletileri dayanarak yapıyorsunuz gibi) kullanıyorsanız Data.Text.Encoding modül iki veri, veya Data.Text.Lazy.Encoding arasında dönüştürmek için kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • mliskIT

    mliskIT

    29 Mart 2012