में \ r \ r \ n में अनुवाद किया गया है मैं विंडोज 7 64-बिट पर हूं। r n Haskell
मेरे प्रोग्राम को बाहरी स्रोत से कुछ पाठ (Utf8 एन्कोडेड) पुनर्प्राप्त करने की आवश्यकता है, इसके साथ कुछ चीज़ें करें, फिर इसे डिस्क पर सहेजें। मूल पाठ न्यूलाइन का प्रतिनिधित्व करने के लिए "\ r \ n" अनुक्रम का उपयोग कर रहा है (मुझे इसे इस तरह से रखने में खुशी है)।
मुद्दा: Data.Text.writeFile प्रत्येक का उपयोग करते समय "\ r \ n" अनुक्रम के रूप में "\ r \ r \ n" अनुवाद किया जा रहा है, कि हर '\ n' के लिए अनुवाद किया है कि "\ आर \ n ", जब भी यह मूल पाठ में पहले से ही '\ r' से पहले है। मैं समझता हूं कि, जब Windows OS पर किसी फ़ाइल को लिखते हैं, '\ n' का अनुवाद "\ r \ n" में किया जाना चाहिए, जब पहले से '\ r' से पहले नहीं है, लेकिन "\ r \ n" का अनुवाद "\ r \ r \ n" सही प्रतीत नहीं होता है।
का उपयोग कर ByteString.writeLine पाठ की encodeUtf8 संस्करण के लिए लागू किया काम करता है अच्छी तरह से हालांकि (बिना किसी अतिरिक्त "\ r" एक "\ r \ n" अनुक्रम के अंदर डाला)
एक साधारण उदाहरण:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString as B
import qualified Data.Text as T
import qualified Data.Text.IO as T (writeFile)
import qualified Data.Text.Encoding as T (encodeUtf8)
str = "Line 1 is here\r\nLine 2 is here\r\nLine 3 is here" :: T.Text
main = do
B.writeFile "byt.bin" $ T.encodeUtf8 str
T.writeFile "txt.bin" str
हेक्स संपादक के साथ इस कोड द्वारा उत्पादित प्रत्येक फ़ाइल को देखते हुए, कोई टी.writeFile लाइन के माध्यम से उत्पादित फ़ाइल में प्रत्येक x0A के सामने अतिरिक्त x0D जोड़ा जा सकता है।
B.writeFile:
T.writeFile:
मेरा प्रश्न: मैं गलत क्या किया? क्या Windows पर T.writeFile का उपयोग करने का कोई तरीका है, और "\ r \ n" "\ r \ r \ n" में अनुवाद नहीं किया गया है?
आप फ़ाइल को यूनिक्स-शैली '\ n "' -ऑनली में _load_ क्यों नहीं करते? यह निश्चित रूप से आपके कार्यक्रम के भीतर चीजों को आसान बना देगा, और आउटपुट \ "\ r \ n" 'के साथ भी बाहर आ जाएगा। – leftaroundabout
@ बाएंअराउंडबाउट: मैंने पूरी कहानी नहीं बताया, लेकिन मूल पाठ बेस 64 प्रारूप में फ़ाइल में स्थित है। मुझे पहले फ़ाइल से बाइट्सट्रिंग्स को पढ़ने की जरूरत है, उन्हें डीकोड करें (डेटा.बेटस्ट्रिंग.बेस 64 का उपयोग करके), फिर उन्हें टेक्स्ट में बदलें (और मैं इसे हेरफेर करना शुरू कर सकता हूं)। उस चरण में मैं सभी "\ r \ n" से "\ n" को प्रतिस्थापित कर सकता हूं। क्या आप यही सुझाव देते हैं? – Janthelme
मैं वास्तव में ऐसा सुझाव दूंगा। यदि आपके प्रोग्राम में तारों में विंडोज-स्टाइल लाइन अंतराल है तो यह सभी प्रकार की अन्य परेशानी का कारण बन सकता है। – leftaroundabout