2009-08-19 16 views
68

मैं परीक्षण कर रहा हूं कि मेरा कुछ कोड खराब डेटा कैसे संभालता है, और मुझे बाइट्स की कुछ श्रृंखला की आवश्यकता है जो अमान्य यूटीएफ -8 हैं।उदाहरण अवैध utf8 स्ट्रिंग उदाहरण?

क्या आप कुछ पोस्ट कर सकते हैं, और आदर्श रूप से, यह एक स्पष्टीकरण क्यों है कि वे बुरे हैं/जहां आप उन्हें मिला?

+3

[वास्तव में गुड, द बैड UTF-8 उदाहरण परीक्षण डाटा] (के संभावित डुप्लिकेट http://stackoverflow.com/questions/1319022/really-good-bad-utf-8-example- परीक्षण-डेटा) – Claudiu

उत्तर

53

आप कई UTF-8 अनियमितताओं के उदाहरण देखेंगे Markus Kuhn's UTF-8 decoder capability and stress test file

पर एक नजर डालें, अकेला शुरू बाइट्स सहित, निरंतरता लापता, लंबा दृश्यों बाइट्स, आदि

-2

परमाणु रूप में पृथक परीक्षण - एक यादृच्छिक अनुक्रम उत्पन्न ऑक्टेट्स का। सबसे अधिक संभावना है कि आप जल्द से जल्द कुछ अवैध अनुक्रम प्राप्त करेंगे।

+1

हेज़ेनबग या ईसेंट्स होने से भी कुछ भी बुरा नहीं है। टेस्ट 10 गुना पास करते हैं, आप उत्पाद को छोड़ देते हैं, परीक्षण विफल रहता है। –

+0

@EricDuminil कभी srand() के बारे में सुना? – shoosh

+0

पर्याप्त मेला। क्या आप उत्तर में इसका उल्लेख कर सकते हैं ताकि मैं अपना डाउनवोट वापस कर सकूं? –

40

PHP में:

$examples = array(
    'Valid ASCII' => "a", 
    'Valid 2 Octet Sequence' => "\xc3\xb1", 
    'Invalid 2 Octet Sequence' => "\xc3\x28", 
    'Invalid Sequence Identifier' => "\xa0\xa1", 
    'Valid 3 Octet Sequence' => "\xe2\x82\xa1", 
    'Invalid 3 Octet Sequence (in 2nd Octet)' => "\xe2\x28\xa1", 
    'Invalid 3 Octet Sequence (in 3rd Octet)' => "\xe2\x82\x28", 
    'Valid 4 Octet Sequence' => "\xf0\x90\x8c\xbc", 
    'Invalid 4 Octet Sequence (in 2nd Octet)' => "\xf0\x28\x8c\xbc", 
    'Invalid 4 Octet Sequence (in 3rd Octet)' => "\xf0\x90\x28\xbc", 
    'Invalid 4 Octet Sequence (in 4th Octet)' => "\xf0\x28\x8c\x28", 
    'Valid 5 Octet Sequence (but not Unicode!)' => "\xf8\xa1\xa1\xa1\xa1", 
    'Valid 6 Octet Sequence (but not Unicode!)' => "\xfc\xa1\xa1\xa1\xa1\xa1", 
); 

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php#54805 से

1

बीमार का गठन बाइट-दृश्यों के पैटर्न के विचार अच्छी तरह से गठित बाइट दृश्यों के मेज से प्राप्त हो सकता है। यूनिकोड मानक 6.2 में "Table 3-7. Well-Formed UTF-8 Byte Sequences" देखें।

Code Points First Byte Second Byte Third Byte Fourth Byte 
    U+0000 - U+007F 00 - 7F 
    U+0080 - U+07FF C2 - DF 80 - BF 
    U+0800 - U+0FFF E0   A0 - BF  80 - BF 
    U+1000 - U+CFFF E1 - EC 80 - BF  80 - BF 
    U+D000 - U+D7FF ED   80 - 9F  80 - BF 
    U+E000 - U+FFFF EE - EF 80 - BF  80 - BF 
U+10000 - U+3FFFF F0   90 - BF  80 - BF 80 - BF 
U+40000 - U+FFFFF F1 - F3 80 - BF  80 - BF 80 - BF 
U+100000 - U+10FFFF F4   80 - 8F  80 - BF 80 - BF 

यहां U + 24B62 से उत्पन्न उदाहरण हैं। मैं उन्हें एक बग रिपोर्ट के लिए इस्तेमाल किया: Bug #65045 mb_convert_encoding breaks well-formed character

// U+24B62: "\xF0\xA4\xAD\xA2" 
"\xF0\xA4\xAD" ."\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD\xA2" 
"\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD\xA2"."\xF0\xA4\xAD" 

बाइट्स अनुगामी की सीमा ([0x80, 0xBF]) की अति सरलीकरण विभिन्न पुस्तकालयों में देखा जा सकता है।

// U+0800 - U+0FFF 
\xE0\x80\x80 

// U+D000 - U+D7FF 
\xED\xBF\xBF 

// U+10000 - U+3FFFF 
\xF0\x80\x80\x80 

// U+100000 - U+10FFFF 
\xF4\xBF\xBF\xBF 
1

, ̆ विशेष रूप से बुरा था। मैं इसे उबंटू पर संयुक्त के रूप में देखता हूं।

कॉमा-ब्रीव

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