{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 5, "category": "combining", "codepoints": 5, "general_categories": ["Ll", "Mn"], "has_astral": false, "has_bidi_control": false, "has_combining": true, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0001", "lower_codepoints": 5, "nfc_codepoints": 4, "nfc_stable": false, "nfkc_changes": true, "nfkc_codepoints": 4, "source": "https://toolkitlabs.org/unicode300/", "string": "cafe\u0301", "trap": "len() counts codepoints, not what a reader sees: truncating here can leave a combining mark attached to the wrong letter, or standing alone.", "upper_codepoints": 5, "utf16_units": 5, "utf8_bytes": 6}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 5, "category": "combining", "codepoints": 5, "general_categories": ["Ll", "Mn"], "has_astral": false, "has_bidi_control": false, "has_combining": true, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0002", "lower_codepoints": 5, "nfc_codepoints": 4, "nfc_stable": false, "nfkc_changes": true, "nfkc_codepoints": 4, "source": "https://toolkitlabs.org/unicode300/", "string": "nae\u0300\u0308", "trap": "len() counts codepoints, not what a reader sees: truncating here can leave a combining mark attached to the wrong letter, or standing alone.", "upper_codepoints": 5, "utf16_units": 5, "utf8_bytes": 7}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 6, "category": "emoji_zwj", "codepoints": 6, "general_categories": ["Cf", "Nd", "Pd", "Sk", "So"], "has_astral": true, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": true, "id": "u300-0031", "lower_codepoints": 6, "nfc_codepoints": 6, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 6, "source": "https://toolkitlabs.org/unicode300/", "string": "\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb-0", "trap": "one visible glyph, several codepoints joined by U+200D: a per-character loop, a reverse, or a hard character limit splits it into pieces that render as strangers.", "upper_codepoints": 6, "utf16_units": 9, "utf8_bytes": 17}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 9, "category": "emoji_zwj", "codepoints": 9, "general_categories": ["Cf", "Ll", "So", "Zs"], "has_astral": true, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": true, "id": "u300-0032", "lower_codepoints": 9, "nfc_codepoints": 9, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 9, "source": "https://toolkitlabs.org/unicode300/", "string": "\ud83d\udc69\u200d\ud83c\udf73 admin", "trap": "one visible glyph, several codepoints joined by U+200D: a per-character loop, a reverse, or a hard character limit splits it into pieces that render as strangers.", "upper_codepoints": 9, "utf16_units": 11, "utf8_bytes": 17}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 12, "category": "astral", "codepoints": 12, "general_categories": ["Ll", "Nd", "Pd", "So"], "has_astral": true, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0061", "lower_codepoints": 12, "nfc_codepoints": 12, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 12, "source": "https://toolkitlabs.org/unicode300/", "string": "invoice-\ud83d\ude00-00", "trap": "beyond the BMP: one codepoint is two UTF-16 code units, so JavaScript's .length, a UTF-16 column limit and Python's len() disagree about the same string.", "upper_codepoints": 12, "utf16_units": 13, "utf8_bytes": 15}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 10, "category": "astral", "codepoints": 10, "general_categories": ["Ll", "Lu", "Nd", "Pd"], "has_astral": true, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0062", "lower_codepoints": 10, "nfc_codepoints": 10, "nfc_stable": true, "nfkc_changes": true, "nfkc_codepoints": 10, "source": "https://toolkitlabs.org/unicode300/", "string": "admin-\ud835\udd73-01", "trap": "beyond the BMP: one codepoint is two UTF-16 code units, so JavaScript's .length, a UTF-16 column limit and Python's len() disagree about the same string.", "upper_codepoints": 10, "utf16_units": 11, "utf8_bytes": 13}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 10, "category": "variation_selector", "codepoints": 10, "general_categories": ["Ll", "Mn", "Nd", "Pd", "So", "Zs"], "has_astral": false, "has_bidi_control": false, "has_combining": true, "has_variation_selector": true, "has_zero_width": false, "id": "u300-0091", "lower_codepoints": 10, "nfc_codepoints": 10, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 10, "source": "https://toolkitlabs.org/unicode300/", "string": "\u2764\ufe0f login-0", "trap": "an invisible U+FE0F/U+FE0E decides text or emoji presentation; strip it and the glyph changes, keep it and the length is one more than it looks.", "upper_codepoints": 10, "utf16_units": 10, "utf8_bytes": 14}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 11, "category": "variation_selector", "codepoints": 11, "general_categories": ["Ll", "Mn", "Nd", "Pd", "So", "Zs"], "has_astral": false, "has_bidi_control": false, "has_combining": true, "has_variation_selector": true, "has_zero_width": false, "id": "u300-0092", "lower_codepoints": 11, "nfc_codepoints": 11, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 11, "source": "https://toolkitlabs.org/unicode300/", "string": "\u2611\ufe0e report-1", "trap": "an invisible U+FE0F/U+FE0E decides text or emoji presentation; strip it and the glyph changes, keep it and the length is one more than it looks.", "upper_codepoints": 11, "utf16_units": 11, "utf8_bytes": 15}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 15, "category": "bidi_control", "codepoints": 15, "general_categories": ["Cf", "Ll", "Po"], "has_astral": false, "has_bidi_control": true, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0121", "lower_codepoints": 15, "nfc_codepoints": 15, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 15, "source": "https://toolkitlabs.org/unicode300/", "string": "invoice\u200efdp.exe", "trap": "invisible direction overrides reorder what is displayed without changing what is stored, so a filename or a name can read differently than it compares.", "upper_codepoints": 15, "utf16_units": 15, "utf8_bytes": 17}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 11, "category": "bidi_control", "codepoints": 11, "general_categories": ["Cf", "Ll", "Lo"], "has_astral": false, "has_bidi_control": true, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0122", "lower_codepoints": 11, "nfc_codepoints": 11, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 11, "source": "https://toolkitlabs.org/unicode300/", "string": "\u05e9\u05dc\u05d5\u05dd\u200fsecure", "trap": "invisible direction overrides reorder what is displayed without changing what is stored, so a filename or a name can read differently than it compares.", "upper_codepoints": 11, "utf16_units": 11, "utf8_bytes": 17}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 8, "category": "zero_width", "codepoints": 8, "general_categories": ["Cf", "Ll"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": true, "id": "u300-0151", "lower_codepoints": 8, "nfc_codepoints": 8, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 8, "source": "https://toolkitlabs.org/unicode300/", "string": "i\u200bnvoice", "trap": "invisible codepoints survive trim(), slip through many alphanumeric checks, and make two identical-looking identifiers unequal.", "upper_codepoints": 8, "utf16_units": 8, "utf8_bytes": 10}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 6, "category": "zero_width", "codepoints": 6, "general_categories": ["Cf", "Ll"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": true, "id": "u300-0152", "lower_codepoints": 6, "nfc_codepoints": 6, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 6, "source": "https://toolkitlabs.org/unicode300/", "string": "ad\u200cmin", "trap": "invisible codepoints survive trim(), slip through many alphanumeric checks, and make two identical-looking identifiers unequal.", "upper_codepoints": 6, "utf16_units": 6, "utf8_bytes": 8}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 11, "category": "homoglyph", "codepoints": 11, "general_categories": ["Ll", "Nd", "Pd"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0181", "lower_codepoints": 11, "nfc_codepoints": 11, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 11, "source": "https://toolkitlabs.org/unicode300/", "string": "\u0430-invoice-0", "trap": "Cyrillic and Greek letters that look like ASCII. NFKC does NOT fold them, so normalising is not a defence against a lookalike.", "upper_codepoints": 11, "utf16_units": 11, "utf8_bytes": 12}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 9, "category": "homoglyph", "codepoints": 9, "general_categories": ["Ll", "Nd", "Pd"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0182", "lower_codepoints": 9, "nfc_codepoints": 9, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 9, "source": "https://toolkitlabs.org/unicode300/", "string": "\u0435-admin-0", "trap": "Cyrillic and Greek letters that look like ASCII. NFKC does NOT fold them, so normalising is not a defence against a lookalike.", "upper_codepoints": 9, "utf16_units": 9, "utf8_bytes": 10}
{"ascii_only": false, "case_roundtrip_stable": false, "casefold_codepoints": 11, "category": "nfkc_fold", "codepoints": 10, "general_categories": ["Ll", "Nd", "Zs"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0211", "lower_codepoints": 10, "nfc_codepoints": 10, "nfc_stable": true, "nfkc_changes": true, "nfkc_codepoints": 11, "source": "https://toolkitlabs.org/unicode300/", "string": "invoice \ufb010", "trap": "compatibility characters whose NFKC form has a different length, so validating before normalising and storing after gives two different strings.", "upper_codepoints": 11, "utf16_units": 10, "utf8_bytes": 12}
{"ascii_only": false, "case_roundtrip_stable": false, "casefold_codepoints": 9, "category": "nfkc_fold", "codepoints": 8, "general_categories": ["Ll", "Nd", "Zs"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0212", "lower_codepoints": 8, "nfc_codepoints": 8, "nfc_stable": true, "nfkc_changes": true, "nfkc_codepoints": 9, "source": "https://toolkitlabs.org/unicode300/", "string": "admin \ufb021", "trap": "compatibility characters whose NFKC form has a different length, so validating before normalising and storing after gives two different strings.", "upper_codepoints": 9, "utf16_units": 8, "utf8_bytes": 10}
{"ascii_only": false, "case_roundtrip_stable": false, "casefold_codepoints": 9, "category": "case_mapping", "codepoints": 8, "general_categories": ["Ll", "Nd", "Pd"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0241", "lower_codepoints": 8, "nfc_codepoints": 8, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 8, "source": "https://toolkitlabs.org/unicode300/", "string": "stra\u00dfe-0", "trap": "case conversion is not length-preserving and not always reversible: upper and lower round-trips change these strings.", "upper_codepoints": 9, "utf16_units": 8, "utf8_bytes": 9}
{"ascii_only": false, "case_roundtrip_stable": false, "casefold_codepoints": 7, "category": "case_mapping", "codepoints": 6, "general_categories": ["Ll", "Lu"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0242", "lower_codepoints": 6, "nfc_codepoints": 6, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 6, "source": "https://toolkitlabs.org/unicode300/", "string": "\u1e9eadmin", "trap": "case conversion is not length-preserving and not always reversible: upper and lower round-trips change these strings.", "upper_codepoints": 6, "utf16_units": 6, "utf8_bytes": 8}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 15, "category": "whitespace", "codepoints": 15, "general_categories": ["Ll", "Po", "Zs"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0271", "lower_codepoints": 15, "nfc_codepoints": 15, "nfc_stable": true, "nfkc_changes": true, "nfkc_codepoints": 15, "source": "https://toolkitlabs.org/unicode300/", "string": "invoice:\u00a0report", "trap": "spaces and line terminators that are not U+0020 or U+000A: splitlines() breaks on some of them, strip() does not remove others.", "upper_codepoints": 15, "utf16_units": 15, "utf8_bytes": 16}
{"ascii_only": false, "case_roundtrip_stable": true, "casefold_codepoints": 14, "category": "whitespace", "codepoints": 14, "general_categories": ["Cc", "Ll", "Po"], "has_astral": false, "has_bidi_control": false, "has_combining": false, "has_variation_selector": false, "has_zero_width": false, "id": "u300-0272", "lower_codepoints": 14, "nfc_codepoints": 14, "nfc_stable": true, "nfkc_changes": false, "nfkc_codepoints": 14, "source": "https://toolkitlabs.org/unicode300/", "string": "admin:\u0085support", "trap": "spaces and line terminators that are not U+0020 or U+000A: splitlines() breaks on some of them, strip() does not remove others.", "upper_codepoints": 14, "utf16_units": 14, "utf8_bytes": 15}
