2016-02-04 10 views
8

मैं एक फ़ाइल नाम एन्कोड करता हूं और इसे /rest/get?name=Filename.txt जैसे यूआरएल के हिस्से के रूप में भेजता हूं। जे एस में लिंक निर्माण के रूप में सरलफ़ायरफ़ॉक्स में encodeURIComponent() के विभिन्न व्यवहार केवल

रूप
url = '/rest/get?name=' + window.encodeURIComponent(file.name); 

यह साधारण मामलों के लिए अच्छा काम करता है लेकिन कट्टर के परीक्षण के लिए मैं

你好abcABCæøåÆØÅäöüïëêîâéíáóúýñ½§!#¤%&()=`@£$€{[]}+´¨^~'-_,;.txt 

URI एन्कोडिंग के नाम पर मैं एक लिंक

/rest/get?name=%E4%BD%A0%E5%A5%BDabcABC%C3%A6%C3%B8%C3%A5%C3%86%C3%98%C3%85%C3%A4%C3%B6%C3%BC%C3%AF%C3%AB%C3%AA%C3%AE%C3%A2%C3%A9%C3%AD%C3%A1%C3%B3%C3%BA%C3%BD%C3%B1%C2%BD%C2%A7%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%C2%A4%25%26()%3D%60%40%C2%A3%24%E2%82%AC%7B%5B%5D%7D%2B%C2%B4%C2%A8%5E~%27-_%2C%3B.txt 
प्राप्त करने की उम्मीद एक फ़ाइल का उपयोग है

और मुझे यह मिल गया। निर्मित लिंक आईई और क्रोम के नवीनतम संस्करणों में ठीक काम करता है लेकिन फ़ायरफ़ॉक्स में विफल रहता है। कुछ जांच के बाद मुझे पता चला है कि फ़ायरफ़ॉक्स encodeURIcomponent में अलग-अलग काम करता है। यहाँ Firefox में वास्तविक परिणाम है:

/rest/get?name=%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%EF%BF%BD%25%26%28%29%3D%60%40%EF%BF%BD%24%3F{[]}%2B%EF%BF%BD%EF%BF%BD^~%27-_%2C%3B.txt 

दृश्य तुलना (क्रोम लिंक बाईं तरफ है और Firefox लिंक सही पर है):

Comparison

मैं भी कॉपी और पेस्ट करने के लिए कोशिश की है फ़ायरफ़ॉक्स में वैध लिंक (क्रोम में निर्मित) और यह ठीक काम करता है।

मुझे अलग-अलग परिणाम क्यों मिलते हैं?
है और इसका एक बग के साथ ̶ ̶e̶n̶c̶o̶d̶e̶U̶R̶I̶c̶o̶m̶p̶o̶n̶e̶n̶t̶(̶)̶ ̶ में Firefox? ̶
फ़ायरफ़ॉक्स encodeURIComponent() में एक अलग एन्कोडिंग का उपयोग करता है?

यूपीडी। मुझे समान प्रश्न मिल गए हैं (encodeURIComponent behaves differently in browsers for China as location [搜索] और encodeURIComponent difference with browsers and ä-ö-å characters [äöå]), बिना जवाब के दोनों।

UPD.2 आगे की जांच से पता चला है कि निम्न वर्णों अलग एन्कोड और उत्पन्न कर रहे हैं सर्वर पर अपवाद 'फ़ाइल नहीं मिली':

  • 你好
  • æøåÆØÅäöüïëêîâéíáóúýñ
  • ½§¤
  • £ €
+0

मुझे लगता है कि करने के लिए यह है कि जा रहा हूँ या तो फ़ायर्फ़ॉक्स फ़ॉन्ट नक्शा अलग है, या कि जो कुछ भी एफएफ एक जावास्क्रिप्ट दुभाषिया के लिए उपयोग करता है बाहर है सनकी – durbnpoisn

+1

'% 3F''? 'है, ऐसा लगता है कि यह यूनिकोड को सही ढंग से समझ नहीं रहा है। –

+0

@ जेम्स टॉर्प हाँ, आप सही हैं। लेकिन जैसा कि आप देख सकते हैं कि यूआरएल का दूसरा भाग अलग-अलग एन्कोड किया गया है और अगर मैं शुरुआत से '你好' को हटा देता हूं तो यह अभी भी विफल रहता है। – naXa

उत्तर

1

I मान लीजिए कि आपकी समस्या encodeURIComponent() विधि नहीं है। यह file.name जो भी बनाता है उसका एन्कोडिंग है। अपना प्रश्न बढ़ाएं file.name कैसे शुरू किया गया है? चार्स कहां से आते हैं?

+0

सर्वर से उनके नामों वाली फ़ाइलों की एक सूची प्राप्त की गई है। – naXa

+1

तो, क्या आप सुनिश्चित कर सकते हैं (जेएस डीबगर का उपयोग करके), file.name, encodeURIComponent() में जाने से पहले, उचित वर्ण (और प्रश्न चिह्न नहीं) हैं? –

+0

@naXa वास्तव में, devtools कंसोल में 'encodeURIComponent ("你好")' आज़माएं, यह आपको "% E4% बीडी% ए0% ई 5% ए 5% बीडी" देता है, जैसा कि आप उम्मीद करते हैं। – Nickolay

-1

encodeURIComponent() एक मूल कार्य है इसलिए फ़ायरफ़ॉक्स स्पष्ट रूप से कवर के तहत कुछ अलग कार्यान्वयन का उपयोग कर रहा है।

यदि आप अटक गए हैं, तो बस अपने स्वयं के जावास्क्रिप्ट कार्यान्वयन को encodeURIComponent() प्रदान करें, तो आपको ब्राउज़र में एक ही परिणाम मिलेंगे। यहाँ एक लिंक कैसे इस बात का एक खुला स्रोत प्रतिलिपि प्राप्त करने के तरीके:

encodeURIComponent algorithm source code

संबंधित मुद्दे