├── .gitignore ├── .gitmodules ├── .travis.yml ├── CHANGELOG.md ├── Cargo.toml ├── LICENSE ├── README.md ├── benches └── bench.rs ├── scripts ├── Cargo.toml ├── compress.rs ├── confusables.txt ├── data.rs ├── emoji-data.txt ├── emoji-sequences.txt ├── emoji.json ├── emoji.txt └── emoji1.json ├── src ├── lib.rs ├── mapping.txt └── pointers.bin └── tests └── unidecode.rs /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | Cargo.lock 3 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "scripts/gemoji"] 2 | path = scripts/gemoji 3 | url = https://github.com/github/gemoji 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: rust 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.6.1 (2025-03-16) 4 | 5 | - Added Unicode Confusables as a fallback mapping 6 | 7 | ## 1.6.0 (2024-05-13) 8 | 9 | - Uniform handling of control characters 10 | - Remove poor any_ascii transliterations 11 | - Don't spell out skin tone modifiers 12 | 13 | ## 1.4.4 (2024-04-13) 14 | 15 | - Revert "Change mapping of Ä" 16 | 17 | ## 1.4.3 (2024-02-16) 18 | 19 | - Slightly improved compression 20 | - New emoji 21 | 22 | ## 1.4.2 (2023-12-10) 23 | 24 | - Change mapping of Ä 25 | 26 | ## 1.4.0 (2023-09-15) 27 | 28 | - Make the iter implement Display 29 | 30 | ## 1.3.3 (2022-12-15) 31 | 32 | - Add fallback from unicode decomposition 33 | 34 | ## 1.3.2 (2022-08-21) 35 | 36 | - More emoji 37 | - Support no_std 38 | 39 | ## 1.3.0 (2021-05-07) 40 | 41 | - Fall back to any_ascii 42 | 43 | ## 1.2.0 (2021-03-24) 44 | 45 | - Fast path for ASCII-only strings 46 | - Update gemoji 47 | 48 | ## 1.1.1 (2020-04-23) 49 | 50 | - Fixed shifted/cropped replacements 51 | 52 | ## 1.1.0 (2020-02-24) 53 | 54 | - Update emoji database 55 | - Edition 2018 56 | 57 | ## 1.0.0 (2018-12-22) 58 | 59 | - Added more emoji 60 | 61 | ## 0.4.0 (2017-05-05) 62 | 63 | - More efficient lookup table which gives smaller memory footprint 64 | - Emoji! (partial support since there's so many of them) 65 | - Fixed trailing spaces 66 | 67 | ## 0.3.0 (2016-12-25) 68 | 69 | - Updated mappings from Text::Unidecode version 1.30. 70 | 71 | ## 0.2.0 (2015-07-01) 72 | 73 | - Switched from phf map to lookup table for speed increase 74 | 75 | ## 0.1.10 (2015-07-01) 76 | 77 | - Added `unidecode_char()` function 78 | 79 | ## 0.1.9 (2015-04-14) 80 | 81 | - Fixed incorrect visibility modifier 82 | 83 | ## 0.1.8 (2015-04-12) 84 | 85 | - Replaced `phf_macros` usage with `phf_codegen`, which works on stable Rust 86 | 87 | ## 0.1.7 (2015-03-26) 88 | 89 | - Updated dependencies 90 | 91 | ## 0.1.6 (2015-03-22) 92 | 93 | - Updated dependencies 94 | 95 | ## 0.1.5 (2015-03-20) 96 | 97 | - Updated dependencies 98 | 99 | ## 0.1.4 (2015-03-18) 100 | 101 | - Fixed typos 102 | 103 | ## 0.1.3 (2015-03-17) 104 | 105 | - Changed badges in README to use shields.io 106 | 107 | ## 0.1.2 (2015-03-17) 108 | 109 | - Added version badge to README 110 | 111 | ## 0.1.1 (2015-03-17) 112 | 113 | - Added link to documentation in the README 114 | 115 | ## 0.1.0 (2015-03-17) 116 | 117 | - Initial release 118 | - Entire `Text::Unidecode` data set exported into a Rust code file 119 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "deunicode" 3 | version = "1.6.2" 4 | authors = ["Kornel Lesinski ", "Amit Chowdhury "] 5 | description = "Convert Unicode strings to pure ASCII by intelligently transliterating them. Suppors Emoji and Chinese." 6 | documentation = "https://docs.rs/deunicode" 7 | categories = ["text-processing", "internationalization"] 8 | homepage = "https://lib.rs/crates/deunicode" 9 | repository = "https://github.com/kornelski/deunicode/" 10 | readme = "README.md" 11 | include = ["src/*", "Cargo.toml", "README.md", "LICENSE"] 12 | edition = "2021" 13 | rust-version = "1.66" 14 | 15 | keywords = [ 16 | "unidecode", 17 | "emoji", 18 | "Unicode", 19 | "ASCII", 20 | "transliteration" 21 | ] 22 | license = "BSD-3-Clause" 23 | 24 | [features] 25 | default = ["alloc"] 26 | # Disable for no-std compatibility 27 | alloc = [] 28 | 29 | [badges] 30 | maintenance = { status = "actively-developed" } 31 | 32 | [package.metadata.docs.rs] 33 | targets = ["x86_64-unknown-linux-gnu"] 34 | rustdoc-args = ["--generate-link-to-definition"] 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Amit Chowdhury 2 | Copyright (c) 2018-2021, Kornel Lesinski 3 | Copyright (c) 2020-2021, Hunter WB 4 | 5 | Redistribution and use in source and binary forms, with or without modification, 6 | are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | * The names of this software's contributors may not be used to endorse or 14 | promote products derived from this software without specific prior written 15 | permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 21 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 24 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # deunicode 2 | 3 | [Documentation](https://docs.rs/deunicode/) 4 | 5 | The `deunicode` library transliterates Unicode strings such as "Æneid" into pure 6 | ASCII ones such as "AEneid". It includes support for emoji. It's compatible with no-std Rust environments. 7 | 8 | Deunicode is quite fast, supports on-the-fly conversion without allocations. It has a compact representation of Unicode data to minimize memory overhead and executable size (about 75K codepoints mapped to 245K ASCII characters, using 450KB of memory, 160KB gzipped). 9 | 10 | ## Examples 11 | 12 | ```rust 13 | use deunicode::deunicode; 14 | 15 | assert_eq!(deunicode("Æneid"), "AEneid"); 16 | assert_eq!(deunicode("étude"), "etude"); 17 | assert_eq!(deunicode("北亰"), "Bei Jing"); 18 | assert_eq!(deunicode("ᔕᓇᓇ"), "shanana"); 19 | assert_eq!(deunicode("げんまい茶"), "genmaiCha"); 20 | assert_eq!(deunicode("🦄☣"), "unicorn biohazard"); 21 | ``` 22 | 23 | ## When to use it? 24 | 25 | It's a better alternative than just stripping all non-ASCII characters or letting them get [mangled](https://en.wikipedia.org/wiki/Mojibake) by some encoding-ignorant system. It's be okay for one-way conversions for things like search indexes and tokenization, as a stronger version of Unicode NFKD. It may be used for generating nice identifiers for file names and URLs, which aren't too user-facing. 26 | 27 | However, like most "universal" libraries of this kind, it has a one-size-fits-all 1:1 mapping of Unicode code points, which can't handle language-specific exceptions nor context-dependent romanization rules. These limitations are only slightly suboptimal for European languages and Korean Hangul, but make a mess of Japanese Kanji. 28 | 29 | ## Guarantees and Warnings 30 | 31 | Here are some guarantees you have when calling `deunicode()`: 32 | * The `String` returned will be valid ASCII; the decimal representation of 33 | every `char` in the string will be between 0 and 127, inclusive. 34 | * Every ASCII character (0x00 - 0x7F) is mapped to itself. 35 | * All Unicode characters will translate to printable ASCII characters 36 | (`\n` or characters in the range 0x20 - 0x7E). 37 | 38 | There are, however, some things you should keep in mind: 39 | * Some transliterations do produce `\n` characters. 40 | * Some Unicode characters transliterate to an empty string, either on purpose 41 | or because `deunicode` does not know about the character. 42 | * Some Unicode characters are unknown and transliterate to `"[?]"` 43 | (or a custom placeholder, or `None` if you use a chars iterator). 44 | * Many Unicode characters transliterate to multi-character strings. For 45 | example, "北" is transliterated as "Bei". 46 | * The transliteration is context-free, and not sophisticated enough to produce proper Chinese or Japanese. 47 | Han characters used in multiple languages are mapped to a single Mandarin pronounciation, 48 | and will be mostly illegible to Japanese readers. Transliteration can't 49 | handle cases where a single character has multiple possible pronounciations. 50 | 51 | ## Unicode data 52 | 53 | * [`Text::Unidecode`](http://search.cpan.org/~sburke/Text-Unidecode-1.30/lib/Text/Unidecode.pm) by Sean M. Burke 54 | * [Unicodey](https://unicodey.com) by Cal Henderson 55 | * [gh emoji](https://lib.rs/gh-emoji) 56 | * [any_ascii](https://anyascii.com/) 57 | 58 | For a detailed explanation on the rationale behind the original 59 | dataset, refer to [this article](http://interglacial.com/~sburke/tpj/as_html/tpj22.html) written 60 | by Burke in 2001. 61 | 62 | This is a maintained alternative to the [unidecode](https://lib.rs/crates/unidecode) crate, which started as a Rust port of [`Text::Unidecode`](http://search.cpan.org/~sburke/Text-Unidecode-1.30/lib/Text/Unidecode.pm) Perl module. 63 | -------------------------------------------------------------------------------- /benches/bench.rs: -------------------------------------------------------------------------------- 1 | #![feature(test)] 2 | 3 | extern crate test; 4 | use deunicode::*; 5 | use test::Bencher; 6 | 7 | #[bench] 8 | fn bench_iter(b: &mut Bencher) { 9 | b.iter(|| { 10 | test::black_box("hęllo world — げんまい茶茶茶! 🦄☣…").ascii_chars().flatten().map(str::len).sum::() 11 | }); 12 | } 13 | 14 | #[bench] 15 | fn bench_str(b: &mut Bencher) { 16 | b.iter(|| { 17 | test::black_box("hęllo world — げんまい茶茶茶! 🦄☣…").to_ascii_lossy().len() 18 | }); 19 | } 20 | 21 | #[bench] 22 | fn bench_ascii(b: &mut Bencher) { 23 | b.iter(|| { 24 | test::black_box("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 25 | tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 26 | quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo 27 | consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 28 | cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non 29 | proident, sunt in culpa qui officia deserunt mollit anim id est laborum.").to_ascii_lossy().len() 30 | }); 31 | } 32 | -------------------------------------------------------------------------------- /scripts/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "unidecode-compress" 3 | version = "0.1.0" 4 | authors = ["Kornel "] 5 | edition = "2024" 6 | 7 | [[bin]] 8 | name = "compress" 9 | path = "compress.rs" 10 | 11 | [dependencies] 12 | serde = "1.0.219" 13 | serde_json = "1.0.140" 14 | serde_derive = "1.0.219" 15 | any_ascii = "0.3.2" 16 | emojis = "0.6.4" 17 | unicode-normalization = "0.1.24" 18 | unic-ucd-category = "0.9.0" 19 | unic-ucd-block = "0.9.0" 20 | deunicode = { path = ".."} 21 | -------------------------------------------------------------------------------- /scripts/compress.rs: -------------------------------------------------------------------------------- 1 | //! Takes data.rs and makes pointers.bin & mapping.txt data files 2 | 3 | 4 | #[macro_use] extern crate serde_derive; 5 | 6 | mod data; 7 | use unic_ucd_category::GeneralCategory; 8 | use unic_ucd_block::Block; 9 | use crate::data::MAPPING; 10 | use std::collections::HashMap; 11 | 12 | const UNKNOWN_CHAR: &'static str = "\0\0\0"; 13 | 14 | use std::fs; 15 | use std::fs::File; 16 | use std::io::Write; 17 | 18 | #[derive(Deserialize)] 19 | struct Emoji1 { 20 | emoji: String, 21 | name: String, 22 | #[serde(default)] 23 | shortname: String, 24 | } 25 | 26 | #[derive(Deserialize)] 27 | struct Gemoji { 28 | emoji: Option, 29 | aliases: Vec, 30 | } 31 | 32 | #[derive(Deserialize)] 33 | struct Emoji2 { 34 | unified: String, 35 | short_name: String, 36 | } 37 | 38 | fn emojiname(s: &str) -> String { 39 | if s.starts_with("skin-") { // skip skin tones 40 | return String::new(); 41 | } 42 | let mut s = s.replace('_'," "); 43 | s.push(' '); 44 | s 45 | } 46 | 47 | fn main() { 48 | // get shortest names out of emoji data 49 | let emoji2 = serde_json::from_slice::>(&fs::read("emoji.json").expect("emoji.json")).unwrap().iter() 50 | .filter_map(|e| usize::from_str_radix(&e.unified, 16).ok().map(|n| (n,emojiname(&e.short_name)))) 51 | .collect::>(); 52 | 53 | // get shortest names out of emoji data 54 | let emoji1 = serde_json::from_slice::>(&fs::read("emoji1.json").expect("emoji1.json")).unwrap().iter() 55 | .filter(|e| e.emoji.chars().count() == 1) 56 | .filter(|e| e.name.len() > 0 || e.shortname.len() > 0) 57 | .map(|e| { 58 | let ch = e.emoji.chars().next().unwrap() as usize; 59 | let shortname = e.shortname.trim_matches(':'); 60 | if shortname.len() > 0 && shortname.len() < e.name.len() { 61 | (ch, emojiname(shortname)) 62 | } else { 63 | (ch, emojiname(&e.name)) 64 | } 65 | }) 66 | .collect::>(); 67 | 68 | let gemoji = serde_json::from_slice::>(&fs::read("gemoji/db/emoji.json").expect("gemoji")).unwrap(); 69 | let gemoji = gemoji.iter() 70 | .filter_map(|e| { 71 | if let Some(ref emoji) = e.emoji { 72 | if emoji.chars().count() == 1 { 73 | let ch = emoji.chars().next().unwrap() as usize; 74 | return Some((ch, &e.aliases)) 75 | } 76 | } 77 | None 78 | }) 79 | .flat_map(|(ch, aliases)| { 80 | aliases.into_iter().map(move |name| (ch, emojiname(name))) 81 | }) 82 | .collect::>(); 83 | 84 | // merge shortest names 85 | let mut all_codepoints: Vec<_> = MAPPING.iter().copied().map(|ch| { 86 | // old data marks unknown as "[?]" 87 | if ch != "[?] " && ch != "[?]" {ch} else {UNKNOWN_CHAR} 88 | }).collect(); 89 | 90 | if all_codepoints.len() < 140000 { all_codepoints.resize(140000, UNKNOWN_CHAR); } 91 | 92 | let mut last = 'x'; 93 | for (ch, replacement) in [ 94 | ('∴', ":."), 95 | ('⏏', "eject "), 96 | ('⏲', "timer "), 97 | ('⏻', "power "), 98 | ('⏼', "power "), 99 | ('⏽', "on "), 100 | ('⏾', "sleep "), 101 | ('⑊', "\\\\"), 102 | ('Ⓜ', "M"), 103 | ('◖', "("), 104 | ('◗', ")"), 105 | ('◢', "/"), 106 | ('◣', "\\"), 107 | ('◤', "/"), 108 | ('◥', "\\"), 109 | ('☀', "*"), 110 | ('☂', "umbrella "), 111 | ('☃', "snowman "), 112 | ('★', "*"), 113 | ('☇', "<"), 114 | ('☎', "telephone "), 115 | ('☏', "telephone "), 116 | ('☐', "[ ]"), 117 | ('☑', "[v]"), 118 | ('☒', "[x]"), 119 | ('☙', "**"), 120 | ('☝', "^"), 121 | ('☞', ">"), 122 | ('☟', "v"), 123 | ('☡', "!!"), 124 | ('☫', "farsi "), 125 | ('☭', "hammer & sickle "), 126 | ('☰', "heaven "), 127 | ('☷', "earth "), 128 | ('☹', ":("), 129 | ('☺', ":)"), 130 | ('☻', ":)"), 131 | ('♔', "white king "), 132 | ('♞', "black knight "), 133 | ('♡', "white heart "), 134 | ('♢', "white diamond "), 135 | ('♤', "white spade "), 136 | ('♧', "white club "), 137 | ('♳', "/1\\"), 138 | ('♴', "/2\\"), 139 | ('♵', "/3\\"), 140 | ('♶', "/4\\"), 141 | ('♷', "/5\\"), 142 | ('♸', "/6\\"), 143 | ('♹', "/7\\"), 144 | ('♺', "recycling "), 145 | ('♼', "recycled (pap) "), 146 | ('♽', "recycled (part pap) "), 147 | ('♾', "(inf) "), 148 | ('⚐', "white flag "), 149 | ('⚑', "black flag "), 150 | ('⚒', "hammer & pick "), 151 | ('⚚', "staff of hermes "), 152 | ('⚞', "\\>"), 153 | ('⚟', "\\<"), 154 | ('⚠', "warning "), 155 | ('⚢', "doubled female sign "), 156 | ('⚦', "male sign with stroke "), 157 | ('⚨', "vertical male sign with stroke "), 158 | ('⚩', "male sign with stroke horizontal "), 159 | ('⚬', "o"), 160 | ('⚭', "oo"), 161 | ('⚮', "o|o"), 162 | ('⚯', "o-o"), 163 | ('⚲', "neuter "), 164 | ('⚼', "sesquiquadrate "), 165 | ('⚿', "[key] "), 166 | ('⛃', "black draughts king "), 167 | ('⛆', "rain "), 168 | ('⛇', "snowman "), 169 | ('⛉', "turned white shogi piece "), 170 | ('⛍', "disabled car "), 171 | ('⛐', "car sliding "), 172 | ('⛒', "circled crossing lanes "), 173 | ('⛕', "alternate oneway left way traffic "), 174 | ('⛚', "::"), 175 | ('⛨', "black cross shield "), 176 | ('⛫', "castle "), 177 | ('⛬', ":."), 178 | ('⛯', "lighthouse "), 179 | ('⛻', "jp bank "), 180 | ('⛼', "graveyard "), 181 | ('⛾', "cup "), 182 | ('✁', "scissors "), 183 | ('✂', "scissors "), 184 | ('✃', "scissors "), 185 | ('✄', "scissors "), 186 | ('✈', "airplane "), 187 | ('✉', "envelope "), 188 | ('✌', "v "), 189 | ('✎', "pencil "), 190 | ('✐', "pencil "), 191 | ('✑', "nib "), 192 | ('✓', "OK"), 193 | ('✔', "checkmark "), 194 | ('✖', "x"), 195 | ('✝', "+"), 196 | ('✳', "*"), 197 | ('✴', "*"), 198 | ('❄', "*"), 199 | ('❇', "*"), 200 | ('❓', "?"), 201 | ('❔', "?"), 202 | ('❕', "!"), 203 | ('❗', "!"), 204 | ('❥', "black heart "), 205 | ('➕', "+"), 206 | ('➖', "-"), 207 | ('➗', "/"), 208 | ('⠁', "a"), 209 | ('⠂', ","), 210 | ('⠃', "b"), 211 | ('⠄', "'"), 212 | ('⠅', "k"), 213 | ('⠆', ";"), 214 | ('⠇', "l"), 215 | ('⠉', "c"), 216 | ('⠊', "i"), 217 | ('⠋', "f"), 218 | ('⠍', "m"), 219 | ('⠎', "s"), 220 | ('⠏', "p"), 221 | ('⠑', "e"), 222 | ('⠒', ":"), 223 | ('⠓', "h"), 224 | ('⠕', "o"), 225 | ('⠖', "!"), 226 | ('⠗', "r"), 227 | ('⠙', "d"), 228 | ('⠚', "j"), 229 | ('⠛', "g"), 230 | ('⠝', "n"), 231 | ('⠞', "t"), 232 | ('⠟', "q"), 233 | ('⠥', "u"), 234 | ('⠦', "?"), 235 | ('⠧', "v"), 236 | ('⠭', "x"), 237 | ('⠲', "."), 238 | ('⠵', "z"), 239 | ('⠺', "w"), 240 | ('⠽', "y"), 241 | ('⡁', "A"), 242 | ('⡃', "B"), 243 | ('⡅', "K"), 244 | ('⡇', "L"), 245 | ('⡉', "C"), 246 | ('⡊', "I"), 247 | ('⡋', "F"), 248 | ('⡍', "M"), 249 | ('⡎', "S"), 250 | ('⡏', "P"), 251 | ('⡑', "E"), 252 | ('⡓', "H"), 253 | ('⡕', "O"), 254 | ('⡗', "R"), 255 | ('⡙', "D"), 256 | ('⡚', "J"), 257 | ('⡛', "G"), 258 | ('⡝', "N"), 259 | ('⡞', "T"), 260 | ('⡟', "Q"), 261 | ('⡥', "U"), 262 | ('⡧', "V"), 263 | ('⡭', "X"), 264 | ('⡵', "Z"), 265 | ('⡺', "W"), 266 | ('⡽', "Y"), 267 | ('⬅', "<="), 268 | ('⬆', "^"), 269 | ('⬇', "v"), 270 | ('⭐', "*"), 271 | ('⭘', "off "), 272 | ('㎂', "uA"), 273 | ('㎛', "um"), 274 | ('么', "Me "), 275 | ('什', "Shen "), 276 | ('价', "Jia "), 277 | ('旅', "Lv "), 278 | ('术', "Shu "), 279 | ('🄯', "copyleft "), 280 | ('🈂', "SA "), 281 | ('🈚', "None"), 282 | ('🈯', "Designated"), 283 | ('🈲', "Prohibited"), 284 | ('🈳', "Vacancy"), 285 | ('🈴', "Pass"), 286 | ('🈵', "Full"), 287 | ('🈶', "Available"), 288 | ('🈷', "Month"), 289 | ('🈸', "Application"), 290 | ('🈹', "Discount"), 291 | ('🈺', "Open"), 292 | ('🌟', "*"), 293 | ('🌪', "tornado "), 294 | ('🎙', "microphone "), 295 | ('🎟', "ticket "), 296 | ('🏍', "motorcycle "), 297 | ('🏎', "racecar "), 298 | ('🏖', "beach "), 299 | ('🏘', "houses "), 300 | ('🏝', "island "), 301 | ('🏞', "park "), 302 | ('💲', "$"), 303 | ('💵', "$$$"), 304 | ('🕊', "dove "), 305 | ('🕏', "bowl of hygieia "), 306 | ('🕨', "right speaker "), 307 | ('🕮', "book "), 308 | ('🕰', "mantelpiece clock "), 309 | ('🕱', "black skull and crossbones "), 310 | ('🕲', "no piracy "), 311 | ('🕵', "detective "), 312 | ('🕻', "telephone "), 313 | ('🖆', "pen envelope "), 314 | ('🖇', "paperclips "), 315 | ('🖈', "black pushpin "), 316 | ('🖉', "pencil "), 317 | ('🖊', "pen "), 318 | ('🖋', "pen "), 319 | ('🖌', "paintbrush "), 320 | ('🖍', "crayon "), 321 | ('🖎', "writing hand "), 322 | ('🖏', "ok hand sign "), 323 | ('🖥', "desktop "), 324 | ('🖦', "keyboard and mouse "), 325 | ('🖧', "networked computers "), 326 | ('🖩', "calculator "), 327 | ('🖰', "two-button mouse "), 328 | ('🖱', "computer mouse "), 329 | ('🖳', "old pc "), 330 | ('🖻', "document "), 331 | ('🗂', "dividers "), 332 | ('🗃', "card file box "), 333 | ('🗒', "notepad "), 334 | ('🗓', "calendar "), 335 | ('🗔', "desktop window "), 336 | ('🗝', "key "), 337 | ('🗞', "newspaper "), 338 | ('🗠', "stocks "), 339 | ('🗡', "dagger "), 340 | ('🗢', "lips "), 341 | ('🗮', "@!"), 342 | ('🗺', "map "), 343 | ('🛊', "girls "), 344 | ('🛋', "couch "), 345 | ('🛎', "bellhop "), 346 | ('🛔', "pagoda "), 347 | ('🛠', "tools "), 348 | ('🛢', "oil "), 349 | ('🛥', "motorboat "), 350 | ('🛦', "military airplane "), 351 | ('🛨', "airplane "), 352 | ('🛩', "airplane "), 353 | ('🛪', "airplane "), 354 | ('🛰', "satellite "), 355 | ('🜻', "As4S4"), 356 | ('🜼', "As4S4"), 357 | ('🝗', "E"), 358 | ('🝛', "aaa"), 359 | ('🝜', "SSS"), 360 | ('🝝', "-SSS"), 361 | ('🟰', "="), 362 | ] { 363 | assert!(ch != last, "{ch} {replacement}"); 364 | last = ch; 365 | all_codepoints[ch as usize] = replacement; 366 | } 367 | 368 | for &(ch, ref name) in gemoji.iter().chain(emoji1.iter()).chain(emoji2.iter()) { 369 | if all_codepoints.len() <= ch { 370 | all_codepoints.resize(ch as usize+1, UNKNOWN_CHAR); 371 | } 372 | if "" == all_codepoints[ch] || "[?]" == all_codepoints[ch] || UNKNOWN_CHAR == all_codepoints[ch] || name.len() < all_codepoints[ch].len() { 373 | assert!(!name.ends_with('2')); 374 | looks_valid(ch, name); 375 | all_codepoints[ch] = name; 376 | } 377 | } 378 | 379 | for (name, ch) in emojis::iter().filter(|e| e.as_str().chars().count() == 1) 380 | .filter_map(|e| Some((e.shortcode().unwrap_or(e.name()), e.as_str().chars().next()? as usize))) { 381 | if all_codepoints.len() <= ch { 382 | all_codepoints.resize(ch as usize+1, UNKNOWN_CHAR); 383 | } 384 | if "" == all_codepoints[ch] || "[?]" == all_codepoints[ch] || UNKNOWN_CHAR == all_codepoints[ch] { 385 | let new_name = format!("{} ", name.trim().replace('_', " ")); 386 | assert!(!new_name.ends_with('2')); 387 | all_codepoints[ch] = into_replacement(ch, new_name); 388 | } 389 | } 390 | 391 | for i in 255..all_codepoints.len() { 392 | let Some(codepoint) = std::char::from_u32(i as u32) else { continue; }; 393 | let ch = all_codepoints[i]; 394 | if ch == UNKNOWN_CHAR || ch == "" { 395 | let mut any = any_ascii::any_ascii_char(codepoint).trim_matches(':'); 396 | if GeneralCategory::of(codepoint) == GeneralCategory::OtherLetter { 397 | if any.as_bytes().iter().any(|b| b.is_ascii_digit()) { 398 | // hieroglyphs are just "A123" 399 | any = ""; 400 | } 401 | } 402 | if any != "" { 403 | // we use spaces instead of underscores in emoji 404 | all_codepoints[i] = if any.chars().any(|c| c.is_alphabetic()) && any.chars().any(|c| c == '_') { 405 | let ch: String = any.chars().map(|c| if c == '_' {' '} else {c}).collect(); 406 | into_replacement(i, ch) 407 | } else { 408 | looks_valid(i, any); 409 | any 410 | }; 411 | } else { 412 | let mut s = String::new(); 413 | let mut changed = false; 414 | unicode_normalization::char::decompose_compatible(codepoint, |denorm| { 415 | if denorm as usize != i { changed = true; } 416 | all_codepoints.get(denorm as usize).map(|c| s.push_str(c)); 417 | }); 418 | if changed && !s.trim().is_empty() && s.bytes().all(|c| c < 255 && c > 0) { 419 | all_codepoints[i] = into_replacement(i, s); 420 | } 421 | } 422 | } else if ch.starts_with("[d") { 423 | // clean up [d123] 424 | all_codepoints[i] = ch.trim_start_matches('[').trim_end_matches(']'); 425 | }; 426 | } 427 | 428 | let sequences = std::fs::read_to_string("emoji-sequences.txt").unwrap(); 429 | for line in sequences.lines().map(|l| l.trim()).filter(|l| !l.is_empty() && !l.starts_with('#')) { 430 | let (name, rest) = line.split(';').nth(2).unwrap().split_once('#').unwrap(); 431 | for (n, e) in name.split("..").zip(rest.split("..")) { 432 | let e = e.trim_matches(|c: char| (c as u32) < 128); 433 | let e = e.chars().filter(|&c| { 434 | !matches!(c as u32, 127995..=127999 | 65039) 435 | }).collect::>(); 436 | if e.len() != 1 { 437 | continue; 438 | } 439 | let ch = e[0] as usize; 440 | if ch == 8419 || ch == 917536 { 441 | continue; 442 | } 443 | if all_codepoints.len() <= ch { 444 | all_codepoints.resize(ch as usize+1, UNKNOWN_CHAR); 445 | } 446 | if "" == all_codepoints[ch] || "[?]" == all_codepoints[ch] || UNKNOWN_CHAR == all_codepoints[ch] { 447 | let new_name = emojiname(&n.trim().replace('_', " ") 448 | .trim_end_matches(" face") 449 | .trim_end_matches(" hand") 450 | .trim_end_matches(" sign") 451 | .trim_start_matches("circled ") 452 | .to_lowercase().chars().filter(|c| c.is_ascii_alphanumeric() || c.is_ascii_whitespace()).collect::()); 453 | assert!(!new_name.ends_with('2')); 454 | all_codepoints[ch] = into_replacement(ch, new_name); 455 | } 456 | } 457 | } 458 | 459 | let sequences = std::fs::read_to_string("emoji-data.txt").unwrap(); 460 | for line in sequences.lines().map(|l| l.trim()).filter(|l| !l.is_empty() && !l.starts_with('#')) { 461 | let line2 = line.split_once('#').unwrap().1; 462 | let (rest, name) = line2.split_once(')').expect(line2); 463 | for (n, e) in name.split("..").zip(rest.split("..")) { 464 | if n.contains("reserved") { 465 | continue; 466 | } 467 | let e = e.trim_matches(|c: char| (c as u32) < 128); 468 | let e = e.chars().filter(|&c| { 469 | !matches!(c as u32, 127995..=127999 | 65039) 470 | }).collect::>(); 471 | if e.len() != 1 { 472 | continue; 473 | } 474 | let ch = e[0] as usize; 475 | if ch == 8205 || ch == 8419 || ch == 917536 || ch == 917631{ 476 | continue; 477 | } 478 | if all_codepoints.len() <= ch { 479 | all_codepoints.resize(ch as usize+1, UNKNOWN_CHAR); 480 | } 481 | if "" == all_codepoints[ch] || "[?]" == all_codepoints[ch] || UNKNOWN_CHAR == all_codepoints[ch] { 482 | let new_name = format!("{} ", n.trim() 483 | .to_lowercase() 484 | .replace('_', " ") 485 | .trim_start_matches("lower right ") 486 | .trim_start_matches("upper right ") 487 | .trim_start_matches("trigram for ") 488 | .trim_start_matches("reversed ") 489 | .trim_start_matches("rotated ") 490 | .trim_start_matches("heavy ") 491 | .trim_end_matches(" symbol") 492 | .trim_end_matches(" suit") 493 | .trim_end_matches(" bullet") 494 | .chars().filter(|c| c.is_ascii_alphanumeric() || c.is_ascii_whitespace()).collect::()); 495 | assert!(!new_name.ends_with('2')); 496 | all_codepoints[ch] = into_replacement(ch, new_name); 497 | } 498 | } 499 | } 500 | 501 | // https://www.unicode.org/Public/security/revision-03/confusables.txt 502 | let confusables = std::fs::read_to_string("confusables.txt").unwrap(); 503 | for line in confusables.lines() { 504 | let line = line.trim_ascii_start(); 505 | if line.is_empty() || line.starts_with('#') || line.starts_with('\u{feff}') { 506 | continue; 507 | } 508 | let mut c = line.split(';'); 509 | let from: u32 = u32::from_str_radix(c.next().expect(line).trim_ascii(), 16).expect(line); 510 | if all_codepoints.get(from as usize).copied().is_some_and(|c| c != UNKNOWN_CHAR && c != "") { 511 | continue; 512 | } 513 | let from_ch = char::from_u32(from).unwrap(); 514 | if Block::of(from_ch).is_some_and(|b| b.name == "CJK Compatibility Ideographs Supplement" || b.name == "Arabic") { 515 | continue; 516 | } 517 | let to: String = c.next().expect(line).trim().split(' ').filter(|c| !c.is_empty()).map(|c| char::from_u32(u32::from_str_radix(c, 16).unwrap()).unwrap()).collect(); 518 | let to_ascii: String = any_ascii::any_ascii(&to); 519 | assert!(!to_ascii.ends_with('2')); 520 | all_codepoints[from as usize] = into_replacement(from as usize, to_ascii); 521 | } 522 | 523 | 524 | for (ch, replacement) in all_codepoints.iter_mut().enumerate() { 525 | let Ok(ch) = (ch as u32).try_into() else { 526 | continue; 527 | }; 528 | let cat = GeneralCategory::of(ch); 529 | use GeneralCategory::*; 530 | if cat == Control { 531 | *replacement = ""; 532 | } 533 | 534 | if *replacement == UNKNOWN_CHAR { 535 | match cat { 536 | SpacingMark | SpaceSeparator => { 537 | *replacement = " "; 538 | }, 539 | ParagraphSeparator => { 540 | *replacement = "\n\n"; 541 | }, 542 | ClosePunctuation => { 543 | *replacement = ")"; 544 | }, 545 | OpenPunctuation => { 546 | *replacement = "("; 547 | }, 548 | InitialPunctuation | FinalPunctuation => { 549 | *replacement = "'"; 550 | }, 551 | OtherPunctuation => { 552 | *replacement = "_"; 553 | }, 554 | DashPunctuation => { 555 | *replacement = "-"; 556 | }, 557 | NonspacingMark | EnclosingMark | ModifierSymbol | Format | Surrogate => { 558 | *replacement = ""; 559 | }, 560 | _ => {}, 561 | } 562 | } 563 | } 564 | 565 | // phrases need to end with a space 566 | for bad in all_codepoints.iter_mut().filter(|c| c.contains(' ') && c.starts_with(|c: char| c.is_ascii_alphabetic()) && !c.ends_with(' ')) { 567 | *bad = Box::leak(format!("{} ", bad).into_boxed_str()); 568 | } 569 | 570 | while all_codepoints.last().copied() == Some(UNKNOWN_CHAR) { 571 | all_codepoints.pop(); 572 | } 573 | 574 | println!("Got {} codepoints to {} chars", 575 | all_codepoints.iter().filter(|&&c| c != "" && c != UNKNOWN_CHAR).count(), 576 | all_codepoints.iter().filter(|&&c| c != "" && c != UNKNOWN_CHAR).map(|s| s.len()).sum::(), 577 | ); 578 | 579 | // find most popular replacements 580 | let mut popularity = HashMap::<&str, (isize, usize)>::new(); 581 | for (n, replacement) in all_codepoints.iter() 582 | .filter(|&&r| r.len()>2 && r != UNKNOWN_CHAR) // 0..=2 len gets special treatment 583 | .enumerate() { 584 | popularity.entry(replacement).or_insert((1,n)).0 -= 1; 585 | } 586 | 587 | // and sort them by most popular first 588 | // most popular first mean small numbers will be most frequently used 589 | // which is good for compression 590 | // then by longest first, so that we can reuse common prefixes 591 | // then roughly group by similarity (original order + alpha) 592 | let mut by_pop = popularity.iter() 593 | .map(|(&rep,&(pop, n))| (rep.chars().any(|c| c.is_ascii_uppercase() || !c.is_ascii_alphabetic()), !rep.chars().any(|c| c == ' '), pop == 0,pop/4,rep.chars().any(|c| c.is_ascii_uppercase()),!rep.len(),n/4, rep)) 594 | .collect::>(); 595 | by_pop.sort(); 596 | 597 | // find redundant replacements that are prefixes/suffixes of existing ones 598 | // so if "abc" is stored, "ab" is redundant. 599 | // I should use a suffix tree but I'm lazy and Rust is fast 600 | let mut longer = HashMap::<&str, &str>::new(); 601 | for &(..,replacement) in by_pop.iter() { 602 | if longer.get(replacement).is_none() { 603 | let mut r = replacement; 604 | while r.len() > 2 { 605 | let mut p = r; 606 | while p.len() > 2 { 607 | longer.entry(p).and_modify(|old| { 608 | if old.len() < replacement.len() { 609 | *old = replacement; 610 | } 611 | }).or_insert(replacement); 612 | p = &p[1..]; 613 | } 614 | r = &r[0..r.len()-1]; 615 | } 616 | } 617 | } 618 | 619 | // make first word overlap with the last word 620 | let mut by_pop = by_pop.into_iter().enumerate().map(|(i, (..,w))| { 621 | (i*2, longer.get(w).copied().unwrap_or(w)) 622 | }).collect::>(); 623 | 624 | let mut last_word = by_pop.iter().rev() 625 | .filter_map(|&(i, replacement)| { 626 | Some((replacement.trim().rsplit_once(' ')?.1, (i, replacement))) 627 | }).collect::>(); 628 | 629 | for (i, replacement) in by_pop.iter_mut() { 630 | let Some((first_word, _)) = replacement.trim().split_once(' ') else { continue; }; 631 | if let Some((matched, _)) = last_word.remove(first_word) { 632 | *i = matched+1; // makes them adjacent in the next loop 633 | } 634 | } 635 | by_pop.sort_by_key(|a| a.0); 636 | 637 | // store each longest replacement, saving its position 638 | let mut mapping = String::with_capacity(60_000); 639 | let mut index = HashMap::<&str, usize>::new(); 640 | 'words: for (_, replacement) in by_pop { 641 | let replacement = longer.get(replacement).copied().expect("known prefix"); 642 | if index.get(replacement).is_none() { 643 | // there's a chance two adjacent replacements form a third 644 | // so "ab", "cd" is useful for "bc" 645 | if let Some(pos) = mapping.find(replacement) { 646 | index.insert(replacement, pos); 647 | } else { 648 | for n in (1..replacement.len().min(mapping.len())).rev() { 649 | if replacement.starts_with(&mapping[mapping.len() - n..]) { 650 | mapping.push_str(&replacement[n..]); 651 | index.insert(replacement, mapping.len() - n); 652 | continue 'words; 653 | } 654 | } 655 | index.insert(replacement, mapping.len()); 656 | mapping.push_str(replacement); 657 | } 658 | } 659 | } 660 | 661 | // Now write pointers to the mapping string 662 | // each is position (2 bytes) + length (1 byte) 663 | let mut pointers = Vec::with_capacity(all_codepoints.len()); 664 | assert!(mapping.len() < u32::max_value() as usize); 665 | for (ch, &replacement) in all_codepoints.iter().enumerate() { 666 | if let Some(ch) = char::from_u32(ch as u32) { 667 | let old = deunicode::deunicode_char(ch).unwrap_or(UNKNOWN_CHAR); 668 | if old != replacement { 669 | eprintln!("all_codepoints['{ch}' as usize] = {replacement:?}; // previously (U+{:04X}) {old:?}", ch as u32); 670 | } 671 | } 672 | 673 | let pos = match replacement.len() { 674 | _ if replacement == UNKNOWN_CHAR => { 675 | 0xFFFF // intentionally invalid len will be caught later 676 | }, 677 | 0 => 0, 678 | 1 => { 679 | let c = replacement.chars().next().unwrap() as usize; 680 | assert!(c < 128); 681 | c 682 | }, 683 | 2 => { 684 | let mut ch = replacement.chars(); 685 | let c1 = ch.next().unwrap() as usize; 686 | let c2 = ch.next().unwrap() as usize; 687 | assert!(c1 < 128); 688 | assert!(c2 < 128); 689 | c1 | (c2 << 8) 690 | }, 691 | len => { 692 | let off = mapping.find(replacement).expect("in index"); 693 | assert_eq!(&mapping[off..off+len], replacement); 694 | off 695 | }, 696 | }; 697 | pointers.push((pos & 0xFF) as u8); 698 | pointers.push((pos >> 8) as u8); 699 | pointers.push(if pos == 0xFFFF {0xFF} else {replacement.len() as u8}); 700 | } 701 | 702 | let mut f = File::create("../src/pointers.bin").unwrap(); 703 | f.write_all(&pointers).unwrap(); 704 | let mut f = File::create("../src/mapping.txt").unwrap(); 705 | f.write_all(mapping.as_bytes()).unwrap(); 706 | } 707 | 708 | #[track_caller] 709 | fn looks_valid(ch: usize, txt: &str) { 710 | assert!(txt.len() <= 4 || !txt.ends_with('2')); 711 | assert!(!txt.to_ascii_lowercase().contains(&format!("{ch:04x}")), "{txt:?}"); 712 | } 713 | 714 | fn into_replacement(ch: usize, txt: String) -> &'static str { 715 | looks_valid(ch, &txt); 716 | assert!(txt.len() < 30 && txt.bytes().all(|b| b > 0), "{txt:?}"); 717 | Box::leak(txt.into_boxed_str()) 718 | } 719 | -------------------------------------------------------------------------------- /scripts/emoji-data.txt: -------------------------------------------------------------------------------- 1 | # emoji-data.txt 2 | # Date: 2023-02-01, 02:22:54 GMT 3 | # © 2023 Unicode®, Inc. 4 | # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. 5 | # For terms of use, see https://www.unicode.org/terms_of_use.html 6 | # 7 | # Emoji Data for UTS #51 8 | # Used with Emoji Version 15.1 and subsequent minor revisions (if any) 9 | # 10 | # For documentation and usage, see https://www.unicode.org/reports/tr51 11 | # 12 | # Format: 13 | # ; # 14 | # Note: there is no guarantee as to the structure of whitespace or comments 15 | # 16 | # Characters and sequences are listed in code point order. Users should be shown a more natural order. 17 | # See the CLDR collation order for Emoji. 18 | 19 | 20 | # ================================================ 21 | 22 | # All omitted code points have Emoji=No 23 | 24 | 0023 ; Emoji # E0.0 [1] (#️) hash sign 25 | 002A ; Emoji # E0.0 [1] (*️) asterisk 26 | 0030..0039 ; Emoji # E0.0 [10] (0️..9️) digit zero..digit nine 27 | 00A9 ; Emoji # E0.6 [1] (©️) copyright 28 | 00AE ; Emoji # E0.6 [1] (®️) registered 29 | 203C ; Emoji # E0.6 [1] (‼️) double exclamation mark 30 | 2049 ; Emoji # E0.6 [1] (⁉️) exclamation question mark 31 | 2122 ; Emoji # E0.6 [1] (™️) trade mark 32 | 2139 ; Emoji # E0.6 [1] (ℹ️) information 33 | 2194..2199 ; Emoji # E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow 34 | 21A9..21AA ; Emoji # E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right 35 | 231A..231B ; Emoji # E0.6 [2] (⌚..⌛) watch..hourglass done 36 | 2328 ; Emoji # E1.0 [1] (⌨️) keyboard 37 | 23CF ; Emoji # E1.0 [1] (⏏️) eject button 38 | 23E9..23EC ; Emoji # E0.6 [4] (⏩..⏬) fast-forward button..fast down button 39 | 23ED..23EE ; Emoji # E0.7 [2] (⏭️..⏮️) next track button..last track button 40 | 23EF ; Emoji # E1.0 [1] (⏯️) play or pause button 41 | 23F0 ; Emoji # E0.6 [1] (⏰) alarm clock 42 | 23F1..23F2 ; Emoji # E1.0 [2] (⏱️..⏲️) stopwatch..timer clock 43 | 23F3 ; Emoji # E0.6 [1] (⏳) hourglass not done 44 | 23F8..23FA ; Emoji # E0.7 [3] (⏸️..⏺️) pause button..record button 45 | 24C2 ; Emoji # E0.6 [1] (Ⓜ️) circled M 46 | 25AA..25AB ; Emoji # E0.6 [2] (▪️..▫️) black small square..white small square 47 | 25B6 ; Emoji # E0.6 [1] (▶️) play button 48 | 25C0 ; Emoji # E0.6 [1] (◀️) reverse button 49 | 25FB..25FE ; Emoji # E0.6 [4] (◻️..◾) white medium square..black medium-small square 50 | 2600..2601 ; Emoji # E0.6 [2] (☀️..☁️) sun..cloud 51 | 2602..2603 ; Emoji # E0.7 [2] (☂️..☃️) umbrella..snowman 52 | 2604 ; Emoji # E1.0 [1] (☄️) comet 53 | 260E ; Emoji # E0.6 [1] (☎️) telephone 54 | 2611 ; Emoji # E0.6 [1] (☑️) check box with check 55 | 2614..2615 ; Emoji # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage 56 | 2618 ; Emoji # E1.0 [1] (☘️) shamrock 57 | 261D ; Emoji # E0.6 [1] (☝️) index pointing up 58 | 2620 ; Emoji # E1.0 [1] (☠️) skull and crossbones 59 | 2622..2623 ; Emoji # E1.0 [2] (☢️..☣️) radioactive..biohazard 60 | 2626 ; Emoji # E1.0 [1] (☦️) orthodox cross 61 | 262A ; Emoji # E0.7 [1] (☪️) star and crescent 62 | 262E ; Emoji # E1.0 [1] (☮️) peace symbol 63 | 262F ; Emoji # E0.7 [1] (☯️) yin yang 64 | 2638..2639 ; Emoji # E0.7 [2] (☸️..☹️) wheel of dharma..frowning face 65 | 263A ; Emoji # E0.6 [1] (☺️) smiling face 66 | 2640 ; Emoji # E4.0 [1] (♀️) female sign 67 | 2642 ; Emoji # E4.0 [1] (♂️) male sign 68 | 2648..2653 ; Emoji # E0.6 [12] (♈..♓) Aries..Pisces 69 | 265F ; Emoji # E11.0 [1] (♟️) chess pawn 70 | 2660 ; Emoji # E0.6 [1] (♠️) spade suit 71 | 2663 ; Emoji # E0.6 [1] (♣️) club suit 72 | 2665..2666 ; Emoji # E0.6 [2] (♥️..♦️) heart suit..diamond suit 73 | 2668 ; Emoji # E0.6 [1] (♨️) hot springs 74 | 267B ; Emoji # E0.6 [1] (♻️) recycling symbol 75 | 267E ; Emoji # E11.0 [1] (♾️) infinity 76 | 267F ; Emoji # E0.6 [1] (♿) wheelchair symbol 77 | 2692 ; Emoji # E1.0 [1] (⚒️) hammer and pick 78 | 2693 ; Emoji # E0.6 [1] (⚓) anchor 79 | 2694 ; Emoji # E1.0 [1] (⚔️) crossed swords 80 | 2695 ; Emoji # E4.0 [1] (⚕️) medical symbol 81 | 2696..2697 ; Emoji # E1.0 [2] (⚖️..⚗️) balance scale..alembic 82 | 2699 ; Emoji # E1.0 [1] (⚙️) gear 83 | 269B..269C ; Emoji # E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis 84 | 26A0..26A1 ; Emoji # E0.6 [2] (⚠️..⚡) warning..high voltage 85 | 26A7 ; Emoji # E13.0 [1] (⚧️) transgender symbol 86 | 26AA..26AB ; Emoji # E0.6 [2] (⚪..⚫) white circle..black circle 87 | 26B0..26B1 ; Emoji # E1.0 [2] (⚰️..⚱️) coffin..funeral urn 88 | 26BD..26BE ; Emoji # E0.6 [2] (⚽..⚾) soccer ball..baseball 89 | 26C4..26C5 ; Emoji # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud 90 | 26C8 ; Emoji # E0.7 [1] (⛈️) cloud with lightning and rain 91 | 26CE ; Emoji # E0.6 [1] (⛎) Ophiuchus 92 | 26CF ; Emoji # E0.7 [1] (⛏️) pick 93 | 26D1 ; Emoji # E0.7 [1] (⛑️) rescue worker’s helmet 94 | 26D3 ; Emoji # E0.7 [1] (⛓️) chains 95 | 26D4 ; Emoji # E0.6 [1] (⛔) no entry 96 | 26E9 ; Emoji # E0.7 [1] (⛩️) shinto shrine 97 | 26EA ; Emoji # E0.6 [1] (⛪) church 98 | 26F0..26F1 ; Emoji # E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground 99 | 26F2..26F3 ; Emoji # E0.6 [2] (⛲..⛳) fountain..flag in hole 100 | 26F4 ; Emoji # E0.7 [1] (⛴️) ferry 101 | 26F5 ; Emoji # E0.6 [1] (⛵) sailboat 102 | 26F7..26F9 ; Emoji # E0.7 [3] (⛷️..⛹️) skier..person bouncing ball 103 | 26FA ; Emoji # E0.6 [1] (⛺) tent 104 | 26FD ; Emoji # E0.6 [1] (⛽) fuel pump 105 | 2702 ; Emoji # E0.6 [1] (✂️) scissors 106 | 2705 ; Emoji # E0.6 [1] (✅) check mark button 107 | 2708..270C ; Emoji # E0.6 [5] (✈️..✌️) airplane..victory hand 108 | 270D ; Emoji # E0.7 [1] (✍️) writing hand 109 | 270F ; Emoji # E0.6 [1] (✏️) pencil 110 | 2712 ; Emoji # E0.6 [1] (✒️) black nib 111 | 2714 ; Emoji # E0.6 [1] (✔️) check mark 112 | 2716 ; Emoji # E0.6 [1] (✖️) multiply 113 | 271D ; Emoji # E0.7 [1] (✝️) latin cross 114 | 2721 ; Emoji # E0.7 [1] (✡️) star of David 115 | 2728 ; Emoji # E0.6 [1] (✨) sparkles 116 | 2733..2734 ; Emoji # E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star 117 | 2744 ; Emoji # E0.6 [1] (❄️) snowflake 118 | 2747 ; Emoji # E0.6 [1] (❇️) sparkle 119 | 274C ; Emoji # E0.6 [1] (❌) cross mark 120 | 274E ; Emoji # E0.6 [1] (❎) cross mark button 121 | 2753..2755 ; Emoji # E0.6 [3] (❓..❕) red question mark..white exclamation mark 122 | 2757 ; Emoji # E0.6 [1] (❗) red exclamation mark 123 | 2763 ; Emoji # E1.0 [1] (❣️) heart exclamation 124 | 2764 ; Emoji # E0.6 [1] (❤️) red heart 125 | 2795..2797 ; Emoji # E0.6 [3] (➕..➗) plus..divide 126 | 27A1 ; Emoji # E0.6 [1] (➡️) right arrow 127 | 27B0 ; Emoji # E0.6 [1] (➰) curly loop 128 | 27BF ; Emoji # E1.0 [1] (➿) double curly loop 129 | 2934..2935 ; Emoji # E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down 130 | 2B05..2B07 ; Emoji # E0.6 [3] (⬅️..⬇️) left arrow..down arrow 131 | 2B1B..2B1C ; Emoji # E0.6 [2] (⬛..⬜) black large square..white large square 132 | 2B50 ; Emoji # E0.6 [1] (⭐) star 133 | 2B55 ; Emoji # E0.6 [1] (⭕) hollow red circle 134 | 3030 ; Emoji # E0.6 [1] (〰️) wavy dash 135 | 303D ; Emoji # E0.6 [1] (〽️) part alternation mark 136 | 3297 ; Emoji # E0.6 [1] (㊗️) Japanese “congratulations” button 137 | 3299 ; Emoji # E0.6 [1] (㊙️) Japanese “secret” button 138 | 1F004 ; Emoji # E0.6 [1] (🀄) mahjong red dragon 139 | 1F0CF ; Emoji # E0.6 [1] (🃏) joker 140 | 1F170..1F171 ; Emoji # E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) 141 | 1F17E..1F17F ; Emoji # E0.6 [2] (🅾️..🅿️) O button (blood type)..P button 142 | 1F18E ; Emoji # E0.6 [1] (🆎) AB button (blood type) 143 | 1F191..1F19A ; Emoji # E0.6 [10] (🆑..🆚) CL button..VS button 144 | 1F1E6..1F1FF ; Emoji # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z 145 | 1F201..1F202 ; Emoji # E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button 146 | 1F21A ; Emoji # E0.6 [1] (🈚) Japanese “free of charge” button 147 | 1F22F ; Emoji # E0.6 [1] (🈯) Japanese “reserved” button 148 | 1F232..1F23A ; Emoji # E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button 149 | 1F250..1F251 ; Emoji # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button 150 | 1F300..1F30C ; Emoji # E0.6 [13] (🌀..🌌) cyclone..milky way 151 | 1F30D..1F30E ; Emoji # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 152 | 1F30F ; Emoji # E0.6 [1] (🌏) globe showing Asia-Australia 153 | 1F310 ; Emoji # E1.0 [1] (🌐) globe with meridians 154 | 1F311 ; Emoji # E0.6 [1] (🌑) new moon 155 | 1F312 ; Emoji # E1.0 [1] (🌒) waxing crescent moon 156 | 1F313..1F315 ; Emoji # E0.6 [3] (🌓..🌕) first quarter moon..full moon 157 | 1F316..1F318 ; Emoji # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon 158 | 1F319 ; Emoji # E0.6 [1] (🌙) crescent moon 159 | 1F31A ; Emoji # E1.0 [1] (🌚) new moon face 160 | 1F31B ; Emoji # E0.6 [1] (🌛) first quarter moon face 161 | 1F31C ; Emoji # E0.7 [1] (🌜) last quarter moon face 162 | 1F31D..1F31E ; Emoji # E1.0 [2] (🌝..🌞) full moon face..sun with face 163 | 1F31F..1F320 ; Emoji # E0.6 [2] (🌟..🌠) glowing star..shooting star 164 | 1F321 ; Emoji # E0.7 [1] (🌡️) thermometer 165 | 1F324..1F32C ; Emoji # E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face 166 | 1F32D..1F32F ; Emoji # E1.0 [3] (🌭..🌯) hot dog..burrito 167 | 1F330..1F331 ; Emoji # E0.6 [2] (🌰..🌱) chestnut..seedling 168 | 1F332..1F333 ; Emoji # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree 169 | 1F334..1F335 ; Emoji # E0.6 [2] (🌴..🌵) palm tree..cactus 170 | 1F336 ; Emoji # E0.7 [1] (🌶️) hot pepper 171 | 1F337..1F34A ; Emoji # E0.6 [20] (🌷..🍊) tulip..tangerine 172 | 1F34B ; Emoji # E1.0 [1] (🍋) lemon 173 | 1F34C..1F34F ; Emoji # E0.6 [4] (🍌..🍏) banana..green apple 174 | 1F350 ; Emoji # E1.0 [1] (🍐) pear 175 | 1F351..1F37B ; Emoji # E0.6 [43] (🍑..🍻) peach..clinking beer mugs 176 | 1F37C ; Emoji # E1.0 [1] (🍼) baby bottle 177 | 1F37D ; Emoji # E0.7 [1] (🍽️) fork and knife with plate 178 | 1F37E..1F37F ; Emoji # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 179 | 1F380..1F393 ; Emoji # E0.6 [20] (🎀..🎓) ribbon..graduation cap 180 | 1F396..1F397 ; Emoji # E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon 181 | 1F399..1F39B ; Emoji # E0.7 [3] (🎙️..🎛️) studio microphone..control knobs 182 | 1F39E..1F39F ; Emoji # E0.7 [2] (🎞️..🎟️) film frames..admission tickets 183 | 1F3A0..1F3C4 ; Emoji # E0.6 [37] (🎠..🏄) carousel horse..person surfing 184 | 1F3C5 ; Emoji # E1.0 [1] (🏅) sports medal 185 | 1F3C6 ; Emoji # E0.6 [1] (🏆) trophy 186 | 1F3C7 ; Emoji # E1.0 [1] (🏇) horse racing 187 | 1F3C8 ; Emoji # E0.6 [1] (🏈) american football 188 | 1F3C9 ; Emoji # E1.0 [1] (🏉) rugby football 189 | 1F3CA ; Emoji # E0.6 [1] (🏊) person swimming 190 | 1F3CB..1F3CE ; Emoji # E0.7 [4] (🏋️..🏎️) person lifting weights..racing car 191 | 1F3CF..1F3D3 ; Emoji # E1.0 [5] (🏏..🏓) cricket game..ping pong 192 | 1F3D4..1F3DF ; Emoji # E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium 193 | 1F3E0..1F3E3 ; Emoji # E0.6 [4] (🏠..🏣) house..Japanese post office 194 | 1F3E4 ; Emoji # E1.0 [1] (🏤) post office 195 | 1F3E5..1F3F0 ; Emoji # E0.6 [12] (🏥..🏰) hospital..castle 196 | 1F3F3 ; Emoji # E0.7 [1] (🏳️) white flag 197 | 1F3F4 ; Emoji # E1.0 [1] (🏴) black flag 198 | 1F3F5 ; Emoji # E0.7 [1] (🏵️) rosette 199 | 1F3F7 ; Emoji # E0.7 [1] (🏷️) label 200 | 1F3F8..1F407 ; Emoji # E1.0 [16] (🏸..🐇) badminton..rabbit 201 | 1F408 ; Emoji # E0.7 [1] (🐈) cat 202 | 1F409..1F40B ; Emoji # E1.0 [3] (🐉..🐋) dragon..whale 203 | 1F40C..1F40E ; Emoji # E0.6 [3] (🐌..🐎) snail..horse 204 | 1F40F..1F410 ; Emoji # E1.0 [2] (🐏..🐐) ram..goat 205 | 1F411..1F412 ; Emoji # E0.6 [2] (🐑..🐒) ewe..monkey 206 | 1F413 ; Emoji # E1.0 [1] (🐓) rooster 207 | 1F414 ; Emoji # E0.6 [1] (🐔) chicken 208 | 1F415 ; Emoji # E0.7 [1] (🐕) dog 209 | 1F416 ; Emoji # E1.0 [1] (🐖) pig 210 | 1F417..1F429 ; Emoji # E0.6 [19] (🐗..🐩) boar..poodle 211 | 1F42A ; Emoji # E1.0 [1] (🐪) camel 212 | 1F42B..1F43E ; Emoji # E0.6 [20] (🐫..🐾) two-hump camel..paw prints 213 | 1F43F ; Emoji # E0.7 [1] (🐿️) chipmunk 214 | 1F440 ; Emoji # E0.6 [1] (👀) eyes 215 | 1F441 ; Emoji # E0.7 [1] (👁️) eye 216 | 1F442..1F464 ; Emoji # E0.6 [35] (👂..👤) ear..bust in silhouette 217 | 1F465 ; Emoji # E1.0 [1] (👥) busts in silhouette 218 | 1F466..1F46B ; Emoji # E0.6 [6] (👦..👫) boy..woman and man holding hands 219 | 1F46C..1F46D ; Emoji # E1.0 [2] (👬..👭) men holding hands..women holding hands 220 | 1F46E..1F4AC ; Emoji # E0.6 [63] (👮..💬) police officer..speech balloon 221 | 1F4AD ; Emoji # E1.0 [1] (💭) thought balloon 222 | 1F4AE..1F4B5 ; Emoji # E0.6 [8] (💮..💵) white flower..dollar banknote 223 | 1F4B6..1F4B7 ; Emoji # E1.0 [2] (💶..💷) euro banknote..pound banknote 224 | 1F4B8..1F4EB ; Emoji # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag 225 | 1F4EC..1F4ED ; Emoji # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag 226 | 1F4EE ; Emoji # E0.6 [1] (📮) postbox 227 | 1F4EF ; Emoji # E1.0 [1] (📯) postal horn 228 | 1F4F0..1F4F4 ; Emoji # E0.6 [5] (📰..📴) newspaper..mobile phone off 229 | 1F4F5 ; Emoji # E1.0 [1] (📵) no mobile phones 230 | 1F4F6..1F4F7 ; Emoji # E0.6 [2] (📶..📷) antenna bars..camera 231 | 1F4F8 ; Emoji # E1.0 [1] (📸) camera with flash 232 | 1F4F9..1F4FC ; Emoji # E0.6 [4] (📹..📼) video camera..videocassette 233 | 1F4FD ; Emoji # E0.7 [1] (📽️) film projector 234 | 1F4FF..1F502 ; Emoji # E1.0 [4] (📿..🔂) prayer beads..repeat single button 235 | 1F503 ; Emoji # E0.6 [1] (🔃) clockwise vertical arrows 236 | 1F504..1F507 ; Emoji # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker 237 | 1F508 ; Emoji # E0.7 [1] (🔈) speaker low volume 238 | 1F509 ; Emoji # E1.0 [1] (🔉) speaker medium volume 239 | 1F50A..1F514 ; Emoji # E0.6 [11] (🔊..🔔) speaker high volume..bell 240 | 1F515 ; Emoji # E1.0 [1] (🔕) bell with slash 241 | 1F516..1F52B ; Emoji # E0.6 [22] (🔖..🔫) bookmark..water pistol 242 | 1F52C..1F52D ; Emoji # E1.0 [2] (🔬..🔭) microscope..telescope 243 | 1F52E..1F53D ; Emoji # E0.6 [16] (🔮..🔽) crystal ball..downwards button 244 | 1F549..1F54A ; Emoji # E0.7 [2] (🕉️..🕊️) om..dove 245 | 1F54B..1F54E ; Emoji # E1.0 [4] (🕋..🕎) kaaba..menorah 246 | 1F550..1F55B ; Emoji # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 247 | 1F55C..1F567 ; Emoji # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty 248 | 1F56F..1F570 ; Emoji # E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock 249 | 1F573..1F579 ; Emoji # E0.7 [7] (🕳️..🕹️) hole..joystick 250 | 1F57A ; Emoji # E3.0 [1] (🕺) man dancing 251 | 1F587 ; Emoji # E0.7 [1] (🖇️) linked paperclips 252 | 1F58A..1F58D ; Emoji # E0.7 [4] (🖊️..🖍️) pen..crayon 253 | 1F590 ; Emoji # E0.7 [1] (🖐️) hand with fingers splayed 254 | 1F595..1F596 ; Emoji # E1.0 [2] (🖕..🖖) middle finger..vulcan salute 255 | 1F5A4 ; Emoji # E3.0 [1] (🖤) black heart 256 | 1F5A5 ; Emoji # E0.7 [1] (🖥️) desktop computer 257 | 1F5A8 ; Emoji # E0.7 [1] (🖨️) printer 258 | 1F5B1..1F5B2 ; Emoji # E0.7 [2] (🖱️..🖲️) computer mouse..trackball 259 | 1F5BC ; Emoji # E0.7 [1] (🖼️) framed picture 260 | 1F5C2..1F5C4 ; Emoji # E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet 261 | 1F5D1..1F5D3 ; Emoji # E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar 262 | 1F5DC..1F5DE ; Emoji # E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper 263 | 1F5E1 ; Emoji # E0.7 [1] (🗡️) dagger 264 | 1F5E3 ; Emoji # E0.7 [1] (🗣️) speaking head 265 | 1F5E8 ; Emoji # E2.0 [1] (🗨️) left speech bubble 266 | 1F5EF ; Emoji # E0.7 [1] (🗯️) right anger bubble 267 | 1F5F3 ; Emoji # E0.7 [1] (🗳️) ballot box with ballot 268 | 1F5FA ; Emoji # E0.7 [1] (🗺️) world map 269 | 1F5FB..1F5FF ; Emoji # E0.6 [5] (🗻..🗿) mount fuji..moai 270 | 1F600 ; Emoji # E1.0 [1] (😀) grinning face 271 | 1F601..1F606 ; Emoji # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face 272 | 1F607..1F608 ; Emoji # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns 273 | 1F609..1F60D ; Emoji # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes 274 | 1F60E ; Emoji # E1.0 [1] (😎) smiling face with sunglasses 275 | 1F60F ; Emoji # E0.6 [1] (😏) smirking face 276 | 1F610 ; Emoji # E0.7 [1] (😐) neutral face 277 | 1F611 ; Emoji # E1.0 [1] (😑) expressionless face 278 | 1F612..1F614 ; Emoji # E0.6 [3] (😒..😔) unamused face..pensive face 279 | 1F615 ; Emoji # E1.0 [1] (😕) confused face 280 | 1F616 ; Emoji # E0.6 [1] (😖) confounded face 281 | 1F617 ; Emoji # E1.0 [1] (😗) kissing face 282 | 1F618 ; Emoji # E0.6 [1] (😘) face blowing a kiss 283 | 1F619 ; Emoji # E1.0 [1] (😙) kissing face with smiling eyes 284 | 1F61A ; Emoji # E0.6 [1] (😚) kissing face with closed eyes 285 | 1F61B ; Emoji # E1.0 [1] (😛) face with tongue 286 | 1F61C..1F61E ; Emoji # E0.6 [3] (😜..😞) winking face with tongue..disappointed face 287 | 1F61F ; Emoji # E1.0 [1] (😟) worried face 288 | 1F620..1F625 ; Emoji # E0.6 [6] (😠..😥) angry face..sad but relieved face 289 | 1F626..1F627 ; Emoji # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face 290 | 1F628..1F62B ; Emoji # E0.6 [4] (😨..😫) fearful face..tired face 291 | 1F62C ; Emoji # E1.0 [1] (😬) grimacing face 292 | 1F62D ; Emoji # E0.6 [1] (😭) loudly crying face 293 | 1F62E..1F62F ; Emoji # E1.0 [2] (😮..😯) face with open mouth..hushed face 294 | 1F630..1F633 ; Emoji # E0.6 [4] (😰..😳) anxious face with sweat..flushed face 295 | 1F634 ; Emoji # E1.0 [1] (😴) sleeping face 296 | 1F635 ; Emoji # E0.6 [1] (😵) face with crossed-out eyes 297 | 1F636 ; Emoji # E1.0 [1] (😶) face without mouth 298 | 1F637..1F640 ; Emoji # E0.6 [10] (😷..🙀) face with medical mask..weary cat 299 | 1F641..1F644 ; Emoji # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes 300 | 1F645..1F64F ; Emoji # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands 301 | 1F680 ; Emoji # E0.6 [1] (🚀) rocket 302 | 1F681..1F682 ; Emoji # E1.0 [2] (🚁..🚂) helicopter..locomotive 303 | 1F683..1F685 ; Emoji # E0.6 [3] (🚃..🚅) railway car..bullet train 304 | 1F686 ; Emoji # E1.0 [1] (🚆) train 305 | 1F687 ; Emoji # E0.6 [1] (🚇) metro 306 | 1F688 ; Emoji # E1.0 [1] (🚈) light rail 307 | 1F689 ; Emoji # E0.6 [1] (🚉) station 308 | 1F68A..1F68B ; Emoji # E1.0 [2] (🚊..🚋) tram..tram car 309 | 1F68C ; Emoji # E0.6 [1] (🚌) bus 310 | 1F68D ; Emoji # E0.7 [1] (🚍) oncoming bus 311 | 1F68E ; Emoji # E1.0 [1] (🚎) trolleybus 312 | 1F68F ; Emoji # E0.6 [1] (🚏) bus stop 313 | 1F690 ; Emoji # E1.0 [1] (🚐) minibus 314 | 1F691..1F693 ; Emoji # E0.6 [3] (🚑..🚓) ambulance..police car 315 | 1F694 ; Emoji # E0.7 [1] (🚔) oncoming police car 316 | 1F695 ; Emoji # E0.6 [1] (🚕) taxi 317 | 1F696 ; Emoji # E1.0 [1] (🚖) oncoming taxi 318 | 1F697 ; Emoji # E0.6 [1] (🚗) automobile 319 | 1F698 ; Emoji # E0.7 [1] (🚘) oncoming automobile 320 | 1F699..1F69A ; Emoji # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck 321 | 1F69B..1F6A1 ; Emoji # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway 322 | 1F6A2 ; Emoji # E0.6 [1] (🚢) ship 323 | 1F6A3 ; Emoji # E1.0 [1] (🚣) person rowing boat 324 | 1F6A4..1F6A5 ; Emoji # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light 325 | 1F6A6 ; Emoji # E1.0 [1] (🚦) vertical traffic light 326 | 1F6A7..1F6AD ; Emoji # E0.6 [7] (🚧..🚭) construction..no smoking 327 | 1F6AE..1F6B1 ; Emoji # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water 328 | 1F6B2 ; Emoji # E0.6 [1] (🚲) bicycle 329 | 1F6B3..1F6B5 ; Emoji # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking 330 | 1F6B6 ; Emoji # E0.6 [1] (🚶) person walking 331 | 1F6B7..1F6B8 ; Emoji # E1.0 [2] (🚷..🚸) no pedestrians..children crossing 332 | 1F6B9..1F6BE ; Emoji # E0.6 [6] (🚹..🚾) men’s room..water closet 333 | 1F6BF ; Emoji # E1.0 [1] (🚿) shower 334 | 1F6C0 ; Emoji # E0.6 [1] (🛀) person taking bath 335 | 1F6C1..1F6C5 ; Emoji # E1.0 [5] (🛁..🛅) bathtub..left luggage 336 | 1F6CB ; Emoji # E0.7 [1] (🛋️) couch and lamp 337 | 1F6CC ; Emoji # E1.0 [1] (🛌) person in bed 338 | 1F6CD..1F6CF ; Emoji # E0.7 [3] (🛍️..🛏️) shopping bags..bed 339 | 1F6D0 ; Emoji # E1.0 [1] (🛐) place of worship 340 | 1F6D1..1F6D2 ; Emoji # E3.0 [2] (🛑..🛒) stop sign..shopping cart 341 | 1F6D5 ; Emoji # E12.0 [1] (🛕) hindu temple 342 | 1F6D6..1F6D7 ; Emoji # E13.0 [2] (🛖..🛗) hut..elevator 343 | 1F6DC ; Emoji # E15.0 [1] (🛜) wireless 344 | 1F6DD..1F6DF ; Emoji # E14.0 [3] (🛝..🛟) playground slide..ring buoy 345 | 1F6E0..1F6E5 ; Emoji # E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat 346 | 1F6E9 ; Emoji # E0.7 [1] (🛩️) small airplane 347 | 1F6EB..1F6EC ; Emoji # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 348 | 1F6F0 ; Emoji # E0.7 [1] (🛰️) satellite 349 | 1F6F3 ; Emoji # E0.7 [1] (🛳️) passenger ship 350 | 1F6F4..1F6F6 ; Emoji # E3.0 [3] (🛴..🛶) kick scooter..canoe 351 | 1F6F7..1F6F8 ; Emoji # E5.0 [2] (🛷..🛸) sled..flying saucer 352 | 1F6F9 ; Emoji # E11.0 [1] (🛹) skateboard 353 | 1F6FA ; Emoji # E12.0 [1] (🛺) auto rickshaw 354 | 1F6FB..1F6FC ; Emoji # E13.0 [2] (🛻..🛼) pickup truck..roller skate 355 | 1F7E0..1F7EB ; Emoji # E12.0 [12] (🟠..🟫) orange circle..brown square 356 | 1F7F0 ; Emoji # E14.0 [1] (🟰) heavy equals sign 357 | 1F90C ; Emoji # E13.0 [1] (🤌) pinched fingers 358 | 1F90D..1F90F ; Emoji # E12.0 [3] (🤍..🤏) white heart..pinching hand 359 | 1F910..1F918 ; Emoji # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns 360 | 1F919..1F91E ; Emoji # E3.0 [6] (🤙..🤞) call me hand..crossed fingers 361 | 1F91F ; Emoji # E5.0 [1] (🤟) love-you gesture 362 | 1F920..1F927 ; Emoji # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face 363 | 1F928..1F92F ; Emoji # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head 364 | 1F930 ; Emoji # E3.0 [1] (🤰) pregnant woman 365 | 1F931..1F932 ; Emoji # E5.0 [2] (🤱..🤲) breast-feeding..palms up together 366 | 1F933..1F93A ; Emoji # E3.0 [8] (🤳..🤺) selfie..person fencing 367 | 1F93C..1F93E ; Emoji # E3.0 [3] (🤼..🤾) people wrestling..person playing handball 368 | 1F93F ; Emoji # E12.0 [1] (🤿) diving mask 369 | 1F940..1F945 ; Emoji # E3.0 [6] (🥀..🥅) wilted flower..goal net 370 | 1F947..1F94B ; Emoji # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform 371 | 1F94C ; Emoji # E5.0 [1] (🥌) curling stone 372 | 1F94D..1F94F ; Emoji # E11.0 [3] (🥍..🥏) lacrosse..flying disc 373 | 1F950..1F95E ; Emoji # E3.0 [15] (🥐..🥞) croissant..pancakes 374 | 1F95F..1F96B ; Emoji # E5.0 [13] (🥟..🥫) dumpling..canned food 375 | 1F96C..1F970 ; Emoji # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts 376 | 1F971 ; Emoji # E12.0 [1] (🥱) yawning face 377 | 1F972 ; Emoji # E13.0 [1] (🥲) smiling face with tear 378 | 1F973..1F976 ; Emoji # E11.0 [4] (🥳..🥶) partying face..cold face 379 | 1F977..1F978 ; Emoji # E13.0 [2] (🥷..🥸) ninja..disguised face 380 | 1F979 ; Emoji # E14.0 [1] (🥹) face holding back tears 381 | 1F97A ; Emoji # E11.0 [1] (🥺) pleading face 382 | 1F97B ; Emoji # E12.0 [1] (🥻) sari 383 | 1F97C..1F97F ; Emoji # E11.0 [4] (🥼..🥿) lab coat..flat shoe 384 | 1F980..1F984 ; Emoji # E1.0 [5] (🦀..🦄) crab..unicorn 385 | 1F985..1F991 ; Emoji # E3.0 [13] (🦅..🦑) eagle..squid 386 | 1F992..1F997 ; Emoji # E5.0 [6] (🦒..🦗) giraffe..cricket 387 | 1F998..1F9A2 ; Emoji # E11.0 [11] (🦘..🦢) kangaroo..swan 388 | 1F9A3..1F9A4 ; Emoji # E13.0 [2] (🦣..🦤) mammoth..dodo 389 | 1F9A5..1F9AA ; Emoji # E12.0 [6] (🦥..🦪) sloth..oyster 390 | 1F9AB..1F9AD ; Emoji # E13.0 [3] (🦫..🦭) beaver..seal 391 | 1F9AE..1F9AF ; Emoji # E12.0 [2] (🦮..🦯) guide dog..white cane 392 | 1F9B0..1F9B9 ; Emoji # E11.0 [10] (🦰..🦹) red hair..supervillain 393 | 1F9BA..1F9BF ; Emoji # E12.0 [6] (🦺..🦿) safety vest..mechanical leg 394 | 1F9C0 ; Emoji # E1.0 [1] (🧀) cheese wedge 395 | 1F9C1..1F9C2 ; Emoji # E11.0 [2] (🧁..🧂) cupcake..salt 396 | 1F9C3..1F9CA ; Emoji # E12.0 [8] (🧃..🧊) beverage box..ice 397 | 1F9CB ; Emoji # E13.0 [1] (🧋) bubble tea 398 | 1F9CC ; Emoji # E14.0 [1] (🧌) troll 399 | 1F9CD..1F9CF ; Emoji # E12.0 [3] (🧍..🧏) person standing..deaf person 400 | 1F9D0..1F9E6 ; Emoji # E5.0 [23] (🧐..🧦) face with monocle..socks 401 | 1F9E7..1F9FF ; Emoji # E11.0 [25] (🧧..🧿) red envelope..nazar amulet 402 | 1FA70..1FA73 ; Emoji # E12.0 [4] (🩰..🩳) ballet shoes..shorts 403 | 1FA74 ; Emoji # E13.0 [1] (🩴) thong sandal 404 | 1FA75..1FA77 ; Emoji # E15.0 [3] (🩵..🩷) light blue heart..pink heart 405 | 1FA78..1FA7A ; Emoji # E12.0 [3] (🩸..🩺) drop of blood..stethoscope 406 | 1FA7B..1FA7C ; Emoji # E14.0 [2] (🩻..🩼) x-ray..crutch 407 | 1FA80..1FA82 ; Emoji # E12.0 [3] (🪀..🪂) yo-yo..parachute 408 | 1FA83..1FA86 ; Emoji # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 409 | 1FA87..1FA88 ; Emoji # E15.0 [2] (🪇..🪈) maracas..flute 410 | 1FA90..1FA95 ; Emoji # E12.0 [6] (🪐..🪕) ringed planet..banjo 411 | 1FA96..1FAA8 ; Emoji # E13.0 [19] (🪖..🪨) military helmet..rock 412 | 1FAA9..1FAAC ; Emoji # E14.0 [4] (🪩..🪬) mirror ball..hamsa 413 | 1FAAD..1FAAF ; Emoji # E15.0 [3] (🪭..🪯) folding hand fan..khanda 414 | 1FAB0..1FAB6 ; Emoji # E13.0 [7] (🪰..🪶) fly..feather 415 | 1FAB7..1FABA ; Emoji # E14.0 [4] (🪷..🪺) lotus..nest with eggs 416 | 1FABB..1FABD ; Emoji # E15.0 [3] (🪻..🪽) hyacinth..wing 417 | 1FABF ; Emoji # E15.0 [1] (🪿) goose 418 | 1FAC0..1FAC2 ; Emoji # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 419 | 1FAC3..1FAC5 ; Emoji # E14.0 [3] (🫃..🫅) pregnant man..person with crown 420 | 1FACE..1FACF ; Emoji # E15.0 [2] (🫎..🫏) moose..donkey 421 | 1FAD0..1FAD6 ; Emoji # E13.0 [7] (🫐..🫖) blueberries..teapot 422 | 1FAD7..1FAD9 ; Emoji # E14.0 [3] (🫗..🫙) pouring liquid..jar 423 | 1FADA..1FADB ; Emoji # E15.0 [2] (🫚..🫛) ginger root..pea pod 424 | 1FAE0..1FAE7 ; Emoji # E14.0 [8] (🫠..🫧) melting face..bubbles 425 | 1FAE8 ; Emoji # E15.0 [1] (🫨) shaking face 426 | 1FAF0..1FAF6 ; Emoji # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 427 | 1FAF7..1FAF8 ; Emoji # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 428 | 429 | # Total elements: 1424 430 | 431 | # ================================================ 432 | 433 | # All omitted code points have Emoji_Presentation=No 434 | 435 | 231A..231B ; Emoji_Presentation # E0.6 [2] (⌚..⌛) watch..hourglass done 436 | 23E9..23EC ; Emoji_Presentation # E0.6 [4] (⏩..⏬) fast-forward button..fast down button 437 | 23F0 ; Emoji_Presentation # E0.6 [1] (⏰) alarm clock 438 | 23F3 ; Emoji_Presentation # E0.6 [1] (⏳) hourglass not done 439 | 25FD..25FE ; Emoji_Presentation # E0.6 [2] (◽..◾) white medium-small square..black medium-small square 440 | 2614..2615 ; Emoji_Presentation # E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage 441 | 2648..2653 ; Emoji_Presentation # E0.6 [12] (♈..♓) Aries..Pisces 442 | 267F ; Emoji_Presentation # E0.6 [1] (♿) wheelchair symbol 443 | 2693 ; Emoji_Presentation # E0.6 [1] (⚓) anchor 444 | 26A1 ; Emoji_Presentation # E0.6 [1] (⚡) high voltage 445 | 26AA..26AB ; Emoji_Presentation # E0.6 [2] (⚪..⚫) white circle..black circle 446 | 26BD..26BE ; Emoji_Presentation # E0.6 [2] (⚽..⚾) soccer ball..baseball 447 | 26C4..26C5 ; Emoji_Presentation # E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud 448 | 26CE ; Emoji_Presentation # E0.6 [1] (⛎) Ophiuchus 449 | 26D4 ; Emoji_Presentation # E0.6 [1] (⛔) no entry 450 | 26EA ; Emoji_Presentation # E0.6 [1] (⛪) church 451 | 26F2..26F3 ; Emoji_Presentation # E0.6 [2] (⛲..⛳) fountain..flag in hole 452 | 26F5 ; Emoji_Presentation # E0.6 [1] (⛵) sailboat 453 | 26FA ; Emoji_Presentation # E0.6 [1] (⛺) tent 454 | 26FD ; Emoji_Presentation # E0.6 [1] (⛽) fuel pump 455 | 2705 ; Emoji_Presentation # E0.6 [1] (✅) check mark button 456 | 270A..270B ; Emoji_Presentation # E0.6 [2] (✊..✋) raised fist..raised hand 457 | 2728 ; Emoji_Presentation # E0.6 [1] (✨) sparkles 458 | 274C ; Emoji_Presentation # E0.6 [1] (❌) cross mark 459 | 274E ; Emoji_Presentation # E0.6 [1] (❎) cross mark button 460 | 2753..2755 ; Emoji_Presentation # E0.6 [3] (❓..❕) red question mark..white exclamation mark 461 | 2757 ; Emoji_Presentation # E0.6 [1] (❗) red exclamation mark 462 | 2795..2797 ; Emoji_Presentation # E0.6 [3] (➕..➗) plus..divide 463 | 27B0 ; Emoji_Presentation # E0.6 [1] (➰) curly loop 464 | 27BF ; Emoji_Presentation # E1.0 [1] (➿) double curly loop 465 | 2B1B..2B1C ; Emoji_Presentation # E0.6 [2] (⬛..⬜) black large square..white large square 466 | 2B50 ; Emoji_Presentation # E0.6 [1] (⭐) star 467 | 2B55 ; Emoji_Presentation # E0.6 [1] (⭕) hollow red circle 468 | 1F004 ; Emoji_Presentation # E0.6 [1] (🀄) mahjong red dragon 469 | 1F0CF ; Emoji_Presentation # E0.6 [1] (🃏) joker 470 | 1F18E ; Emoji_Presentation # E0.6 [1] (🆎) AB button (blood type) 471 | 1F191..1F19A ; Emoji_Presentation # E0.6 [10] (🆑..🆚) CL button..VS button 472 | 1F1E6..1F1FF ; Emoji_Presentation # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z 473 | 1F201 ; Emoji_Presentation # E0.6 [1] (🈁) Japanese “here” button 474 | 1F21A ; Emoji_Presentation # E0.6 [1] (🈚) Japanese “free of charge” button 475 | 1F22F ; Emoji_Presentation # E0.6 [1] (🈯) Japanese “reserved” button 476 | 1F232..1F236 ; Emoji_Presentation # E0.6 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button 477 | 1F238..1F23A ; Emoji_Presentation # E0.6 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button 478 | 1F250..1F251 ; Emoji_Presentation # E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button 479 | 1F300..1F30C ; Emoji_Presentation # E0.6 [13] (🌀..🌌) cyclone..milky way 480 | 1F30D..1F30E ; Emoji_Presentation # E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 481 | 1F30F ; Emoji_Presentation # E0.6 [1] (🌏) globe showing Asia-Australia 482 | 1F310 ; Emoji_Presentation # E1.0 [1] (🌐) globe with meridians 483 | 1F311 ; Emoji_Presentation # E0.6 [1] (🌑) new moon 484 | 1F312 ; Emoji_Presentation # E1.0 [1] (🌒) waxing crescent moon 485 | 1F313..1F315 ; Emoji_Presentation # E0.6 [3] (🌓..🌕) first quarter moon..full moon 486 | 1F316..1F318 ; Emoji_Presentation # E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon 487 | 1F319 ; Emoji_Presentation # E0.6 [1] (🌙) crescent moon 488 | 1F31A ; Emoji_Presentation # E1.0 [1] (🌚) new moon face 489 | 1F31B ; Emoji_Presentation # E0.6 [1] (🌛) first quarter moon face 490 | 1F31C ; Emoji_Presentation # E0.7 [1] (🌜) last quarter moon face 491 | 1F31D..1F31E ; Emoji_Presentation # E1.0 [2] (🌝..🌞) full moon face..sun with face 492 | 1F31F..1F320 ; Emoji_Presentation # E0.6 [2] (🌟..🌠) glowing star..shooting star 493 | 1F32D..1F32F ; Emoji_Presentation # E1.0 [3] (🌭..🌯) hot dog..burrito 494 | 1F330..1F331 ; Emoji_Presentation # E0.6 [2] (🌰..🌱) chestnut..seedling 495 | 1F332..1F333 ; Emoji_Presentation # E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree 496 | 1F334..1F335 ; Emoji_Presentation # E0.6 [2] (🌴..🌵) palm tree..cactus 497 | 1F337..1F34A ; Emoji_Presentation # E0.6 [20] (🌷..🍊) tulip..tangerine 498 | 1F34B ; Emoji_Presentation # E1.0 [1] (🍋) lemon 499 | 1F34C..1F34F ; Emoji_Presentation # E0.6 [4] (🍌..🍏) banana..green apple 500 | 1F350 ; Emoji_Presentation # E1.0 [1] (🍐) pear 501 | 1F351..1F37B ; Emoji_Presentation # E0.6 [43] (🍑..🍻) peach..clinking beer mugs 502 | 1F37C ; Emoji_Presentation # E1.0 [1] (🍼) baby bottle 503 | 1F37E..1F37F ; Emoji_Presentation # E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 504 | 1F380..1F393 ; Emoji_Presentation # E0.6 [20] (🎀..🎓) ribbon..graduation cap 505 | 1F3A0..1F3C4 ; Emoji_Presentation # E0.6 [37] (🎠..🏄) carousel horse..person surfing 506 | 1F3C5 ; Emoji_Presentation # E1.0 [1] (🏅) sports medal 507 | 1F3C6 ; Emoji_Presentation # E0.6 [1] (🏆) trophy 508 | 1F3C7 ; Emoji_Presentation # E1.0 [1] (🏇) horse racing 509 | 1F3C8 ; Emoji_Presentation # E0.6 [1] (🏈) american football 510 | 1F3C9 ; Emoji_Presentation # E1.0 [1] (🏉) rugby football 511 | 1F3CA ; Emoji_Presentation # E0.6 [1] (🏊) person swimming 512 | 1F3CF..1F3D3 ; Emoji_Presentation # E1.0 [5] (🏏..🏓) cricket game..ping pong 513 | 1F3E0..1F3E3 ; Emoji_Presentation # E0.6 [4] (🏠..🏣) house..Japanese post office 514 | 1F3E4 ; Emoji_Presentation # E1.0 [1] (🏤) post office 515 | 1F3E5..1F3F0 ; Emoji_Presentation # E0.6 [12] (🏥..🏰) hospital..castle 516 | 1F3F4 ; Emoji_Presentation # E1.0 [1] (🏴) black flag 517 | 1F3F8..1F407 ; Emoji_Presentation # E1.0 [16] (🏸..🐇) badminton..rabbit 518 | 1F408 ; Emoji_Presentation # E0.7 [1] (🐈) cat 519 | 1F409..1F40B ; Emoji_Presentation # E1.0 [3] (🐉..🐋) dragon..whale 520 | 1F40C..1F40E ; Emoji_Presentation # E0.6 [3] (🐌..🐎) snail..horse 521 | 1F40F..1F410 ; Emoji_Presentation # E1.0 [2] (🐏..🐐) ram..goat 522 | 1F411..1F412 ; Emoji_Presentation # E0.6 [2] (🐑..🐒) ewe..monkey 523 | 1F413 ; Emoji_Presentation # E1.0 [1] (🐓) rooster 524 | 1F414 ; Emoji_Presentation # E0.6 [1] (🐔) chicken 525 | 1F415 ; Emoji_Presentation # E0.7 [1] (🐕) dog 526 | 1F416 ; Emoji_Presentation # E1.0 [1] (🐖) pig 527 | 1F417..1F429 ; Emoji_Presentation # E0.6 [19] (🐗..🐩) boar..poodle 528 | 1F42A ; Emoji_Presentation # E1.0 [1] (🐪) camel 529 | 1F42B..1F43E ; Emoji_Presentation # E0.6 [20] (🐫..🐾) two-hump camel..paw prints 530 | 1F440 ; Emoji_Presentation # E0.6 [1] (👀) eyes 531 | 1F442..1F464 ; Emoji_Presentation # E0.6 [35] (👂..👤) ear..bust in silhouette 532 | 1F465 ; Emoji_Presentation # E1.0 [1] (👥) busts in silhouette 533 | 1F466..1F46B ; Emoji_Presentation # E0.6 [6] (👦..👫) boy..woman and man holding hands 534 | 1F46C..1F46D ; Emoji_Presentation # E1.0 [2] (👬..👭) men holding hands..women holding hands 535 | 1F46E..1F4AC ; Emoji_Presentation # E0.6 [63] (👮..💬) police officer..speech balloon 536 | 1F4AD ; Emoji_Presentation # E1.0 [1] (💭) thought balloon 537 | 1F4AE..1F4B5 ; Emoji_Presentation # E0.6 [8] (💮..💵) white flower..dollar banknote 538 | 1F4B6..1F4B7 ; Emoji_Presentation # E1.0 [2] (💶..💷) euro banknote..pound banknote 539 | 1F4B8..1F4EB ; Emoji_Presentation # E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag 540 | 1F4EC..1F4ED ; Emoji_Presentation # E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag 541 | 1F4EE ; Emoji_Presentation # E0.6 [1] (📮) postbox 542 | 1F4EF ; Emoji_Presentation # E1.0 [1] (📯) postal horn 543 | 1F4F0..1F4F4 ; Emoji_Presentation # E0.6 [5] (📰..📴) newspaper..mobile phone off 544 | 1F4F5 ; Emoji_Presentation # E1.0 [1] (📵) no mobile phones 545 | 1F4F6..1F4F7 ; Emoji_Presentation # E0.6 [2] (📶..📷) antenna bars..camera 546 | 1F4F8 ; Emoji_Presentation # E1.0 [1] (📸) camera with flash 547 | 1F4F9..1F4FC ; Emoji_Presentation # E0.6 [4] (📹..📼) video camera..videocassette 548 | 1F4FF..1F502 ; Emoji_Presentation # E1.0 [4] (📿..🔂) prayer beads..repeat single button 549 | 1F503 ; Emoji_Presentation # E0.6 [1] (🔃) clockwise vertical arrows 550 | 1F504..1F507 ; Emoji_Presentation # E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker 551 | 1F508 ; Emoji_Presentation # E0.7 [1] (🔈) speaker low volume 552 | 1F509 ; Emoji_Presentation # E1.0 [1] (🔉) speaker medium volume 553 | 1F50A..1F514 ; Emoji_Presentation # E0.6 [11] (🔊..🔔) speaker high volume..bell 554 | 1F515 ; Emoji_Presentation # E1.0 [1] (🔕) bell with slash 555 | 1F516..1F52B ; Emoji_Presentation # E0.6 [22] (🔖..🔫) bookmark..water pistol 556 | 1F52C..1F52D ; Emoji_Presentation # E1.0 [2] (🔬..🔭) microscope..telescope 557 | 1F52E..1F53D ; Emoji_Presentation # E0.6 [16] (🔮..🔽) crystal ball..downwards button 558 | 1F54B..1F54E ; Emoji_Presentation # E1.0 [4] (🕋..🕎) kaaba..menorah 559 | 1F550..1F55B ; Emoji_Presentation # E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 560 | 1F55C..1F567 ; Emoji_Presentation # E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty 561 | 1F57A ; Emoji_Presentation # E3.0 [1] (🕺) man dancing 562 | 1F595..1F596 ; Emoji_Presentation # E1.0 [2] (🖕..🖖) middle finger..vulcan salute 563 | 1F5A4 ; Emoji_Presentation # E3.0 [1] (🖤) black heart 564 | 1F5FB..1F5FF ; Emoji_Presentation # E0.6 [5] (🗻..🗿) mount fuji..moai 565 | 1F600 ; Emoji_Presentation # E1.0 [1] (😀) grinning face 566 | 1F601..1F606 ; Emoji_Presentation # E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face 567 | 1F607..1F608 ; Emoji_Presentation # E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns 568 | 1F609..1F60D ; Emoji_Presentation # E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes 569 | 1F60E ; Emoji_Presentation # E1.0 [1] (😎) smiling face with sunglasses 570 | 1F60F ; Emoji_Presentation # E0.6 [1] (😏) smirking face 571 | 1F610 ; Emoji_Presentation # E0.7 [1] (😐) neutral face 572 | 1F611 ; Emoji_Presentation # E1.0 [1] (😑) expressionless face 573 | 1F612..1F614 ; Emoji_Presentation # E0.6 [3] (😒..😔) unamused face..pensive face 574 | 1F615 ; Emoji_Presentation # E1.0 [1] (😕) confused face 575 | 1F616 ; Emoji_Presentation # E0.6 [1] (😖) confounded face 576 | 1F617 ; Emoji_Presentation # E1.0 [1] (😗) kissing face 577 | 1F618 ; Emoji_Presentation # E0.6 [1] (😘) face blowing a kiss 578 | 1F619 ; Emoji_Presentation # E1.0 [1] (😙) kissing face with smiling eyes 579 | 1F61A ; Emoji_Presentation # E0.6 [1] (😚) kissing face with closed eyes 580 | 1F61B ; Emoji_Presentation # E1.0 [1] (😛) face with tongue 581 | 1F61C..1F61E ; Emoji_Presentation # E0.6 [3] (😜..😞) winking face with tongue..disappointed face 582 | 1F61F ; Emoji_Presentation # E1.0 [1] (😟) worried face 583 | 1F620..1F625 ; Emoji_Presentation # E0.6 [6] (😠..😥) angry face..sad but relieved face 584 | 1F626..1F627 ; Emoji_Presentation # E1.0 [2] (😦..😧) frowning face with open mouth..anguished face 585 | 1F628..1F62B ; Emoji_Presentation # E0.6 [4] (😨..😫) fearful face..tired face 586 | 1F62C ; Emoji_Presentation # E1.0 [1] (😬) grimacing face 587 | 1F62D ; Emoji_Presentation # E0.6 [1] (😭) loudly crying face 588 | 1F62E..1F62F ; Emoji_Presentation # E1.0 [2] (😮..😯) face with open mouth..hushed face 589 | 1F630..1F633 ; Emoji_Presentation # E0.6 [4] (😰..😳) anxious face with sweat..flushed face 590 | 1F634 ; Emoji_Presentation # E1.0 [1] (😴) sleeping face 591 | 1F635 ; Emoji_Presentation # E0.6 [1] (😵) face with crossed-out eyes 592 | 1F636 ; Emoji_Presentation # E1.0 [1] (😶) face without mouth 593 | 1F637..1F640 ; Emoji_Presentation # E0.6 [10] (😷..🙀) face with medical mask..weary cat 594 | 1F641..1F644 ; Emoji_Presentation # E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes 595 | 1F645..1F64F ; Emoji_Presentation # E0.6 [11] (🙅..🙏) person gesturing NO..folded hands 596 | 1F680 ; Emoji_Presentation # E0.6 [1] (🚀) rocket 597 | 1F681..1F682 ; Emoji_Presentation # E1.0 [2] (🚁..🚂) helicopter..locomotive 598 | 1F683..1F685 ; Emoji_Presentation # E0.6 [3] (🚃..🚅) railway car..bullet train 599 | 1F686 ; Emoji_Presentation # E1.0 [1] (🚆) train 600 | 1F687 ; Emoji_Presentation # E0.6 [1] (🚇) metro 601 | 1F688 ; Emoji_Presentation # E1.0 [1] (🚈) light rail 602 | 1F689 ; Emoji_Presentation # E0.6 [1] (🚉) station 603 | 1F68A..1F68B ; Emoji_Presentation # E1.0 [2] (🚊..🚋) tram..tram car 604 | 1F68C ; Emoji_Presentation # E0.6 [1] (🚌) bus 605 | 1F68D ; Emoji_Presentation # E0.7 [1] (🚍) oncoming bus 606 | 1F68E ; Emoji_Presentation # E1.0 [1] (🚎) trolleybus 607 | 1F68F ; Emoji_Presentation # E0.6 [1] (🚏) bus stop 608 | 1F690 ; Emoji_Presentation # E1.0 [1] (🚐) minibus 609 | 1F691..1F693 ; Emoji_Presentation # E0.6 [3] (🚑..🚓) ambulance..police car 610 | 1F694 ; Emoji_Presentation # E0.7 [1] (🚔) oncoming police car 611 | 1F695 ; Emoji_Presentation # E0.6 [1] (🚕) taxi 612 | 1F696 ; Emoji_Presentation # E1.0 [1] (🚖) oncoming taxi 613 | 1F697 ; Emoji_Presentation # E0.6 [1] (🚗) automobile 614 | 1F698 ; Emoji_Presentation # E0.7 [1] (🚘) oncoming automobile 615 | 1F699..1F69A ; Emoji_Presentation # E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck 616 | 1F69B..1F6A1 ; Emoji_Presentation # E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway 617 | 1F6A2 ; Emoji_Presentation # E0.6 [1] (🚢) ship 618 | 1F6A3 ; Emoji_Presentation # E1.0 [1] (🚣) person rowing boat 619 | 1F6A4..1F6A5 ; Emoji_Presentation # E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light 620 | 1F6A6 ; Emoji_Presentation # E1.0 [1] (🚦) vertical traffic light 621 | 1F6A7..1F6AD ; Emoji_Presentation # E0.6 [7] (🚧..🚭) construction..no smoking 622 | 1F6AE..1F6B1 ; Emoji_Presentation # E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water 623 | 1F6B2 ; Emoji_Presentation # E0.6 [1] (🚲) bicycle 624 | 1F6B3..1F6B5 ; Emoji_Presentation # E1.0 [3] (🚳..🚵) no bicycles..person mountain biking 625 | 1F6B6 ; Emoji_Presentation # E0.6 [1] (🚶) person walking 626 | 1F6B7..1F6B8 ; Emoji_Presentation # E1.0 [2] (🚷..🚸) no pedestrians..children crossing 627 | 1F6B9..1F6BE ; Emoji_Presentation # E0.6 [6] (🚹..🚾) men’s room..water closet 628 | 1F6BF ; Emoji_Presentation # E1.0 [1] (🚿) shower 629 | 1F6C0 ; Emoji_Presentation # E0.6 [1] (🛀) person taking bath 630 | 1F6C1..1F6C5 ; Emoji_Presentation # E1.0 [5] (🛁..🛅) bathtub..left luggage 631 | 1F6CC ; Emoji_Presentation # E1.0 [1] (🛌) person in bed 632 | 1F6D0 ; Emoji_Presentation # E1.0 [1] (🛐) place of worship 633 | 1F6D1..1F6D2 ; Emoji_Presentation # E3.0 [2] (🛑..🛒) stop sign..shopping cart 634 | 1F6D5 ; Emoji_Presentation # E12.0 [1] (🛕) hindu temple 635 | 1F6D6..1F6D7 ; Emoji_Presentation # E13.0 [2] (🛖..🛗) hut..elevator 636 | 1F6DC ; Emoji_Presentation # E15.0 [1] (🛜) wireless 637 | 1F6DD..1F6DF ; Emoji_Presentation # E14.0 [3] (🛝..🛟) playground slide..ring buoy 638 | 1F6EB..1F6EC ; Emoji_Presentation # E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 639 | 1F6F4..1F6F6 ; Emoji_Presentation # E3.0 [3] (🛴..🛶) kick scooter..canoe 640 | 1F6F7..1F6F8 ; Emoji_Presentation # E5.0 [2] (🛷..🛸) sled..flying saucer 641 | 1F6F9 ; Emoji_Presentation # E11.0 [1] (🛹) skateboard 642 | 1F6FA ; Emoji_Presentation # E12.0 [1] (🛺) auto rickshaw 643 | 1F6FB..1F6FC ; Emoji_Presentation # E13.0 [2] (🛻..🛼) pickup truck..roller skate 644 | 1F7E0..1F7EB ; Emoji_Presentation # E12.0 [12] (🟠..🟫) orange circle..brown square 645 | 1F7F0 ; Emoji_Presentation # E14.0 [1] (🟰) heavy equals sign 646 | 1F90C ; Emoji_Presentation # E13.0 [1] (🤌) pinched fingers 647 | 1F90D..1F90F ; Emoji_Presentation # E12.0 [3] (🤍..🤏) white heart..pinching hand 648 | 1F910..1F918 ; Emoji_Presentation # E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns 649 | 1F919..1F91E ; Emoji_Presentation # E3.0 [6] (🤙..🤞) call me hand..crossed fingers 650 | 1F91F ; Emoji_Presentation # E5.0 [1] (🤟) love-you gesture 651 | 1F920..1F927 ; Emoji_Presentation # E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face 652 | 1F928..1F92F ; Emoji_Presentation # E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head 653 | 1F930 ; Emoji_Presentation # E3.0 [1] (🤰) pregnant woman 654 | 1F931..1F932 ; Emoji_Presentation # E5.0 [2] (🤱..🤲) breast-feeding..palms up together 655 | 1F933..1F93A ; Emoji_Presentation # E3.0 [8] (🤳..🤺) selfie..person fencing 656 | 1F93C..1F93E ; Emoji_Presentation # E3.0 [3] (🤼..🤾) people wrestling..person playing handball 657 | 1F93F ; Emoji_Presentation # E12.0 [1] (🤿) diving mask 658 | 1F940..1F945 ; Emoji_Presentation # E3.0 [6] (🥀..🥅) wilted flower..goal net 659 | 1F947..1F94B ; Emoji_Presentation # E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform 660 | 1F94C ; Emoji_Presentation # E5.0 [1] (🥌) curling stone 661 | 1F94D..1F94F ; Emoji_Presentation # E11.0 [3] (🥍..🥏) lacrosse..flying disc 662 | 1F950..1F95E ; Emoji_Presentation # E3.0 [15] (🥐..🥞) croissant..pancakes 663 | 1F95F..1F96B ; Emoji_Presentation # E5.0 [13] (🥟..🥫) dumpling..canned food 664 | 1F96C..1F970 ; Emoji_Presentation # E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts 665 | 1F971 ; Emoji_Presentation # E12.0 [1] (🥱) yawning face 666 | 1F972 ; Emoji_Presentation # E13.0 [1] (🥲) smiling face with tear 667 | 1F973..1F976 ; Emoji_Presentation # E11.0 [4] (🥳..🥶) partying face..cold face 668 | 1F977..1F978 ; Emoji_Presentation # E13.0 [2] (🥷..🥸) ninja..disguised face 669 | 1F979 ; Emoji_Presentation # E14.0 [1] (🥹) face holding back tears 670 | 1F97A ; Emoji_Presentation # E11.0 [1] (🥺) pleading face 671 | 1F97B ; Emoji_Presentation # E12.0 [1] (🥻) sari 672 | 1F97C..1F97F ; Emoji_Presentation # E11.0 [4] (🥼..🥿) lab coat..flat shoe 673 | 1F980..1F984 ; Emoji_Presentation # E1.0 [5] (🦀..🦄) crab..unicorn 674 | 1F985..1F991 ; Emoji_Presentation # E3.0 [13] (🦅..🦑) eagle..squid 675 | 1F992..1F997 ; Emoji_Presentation # E5.0 [6] (🦒..🦗) giraffe..cricket 676 | 1F998..1F9A2 ; Emoji_Presentation # E11.0 [11] (🦘..🦢) kangaroo..swan 677 | 1F9A3..1F9A4 ; Emoji_Presentation # E13.0 [2] (🦣..🦤) mammoth..dodo 678 | 1F9A5..1F9AA ; Emoji_Presentation # E12.0 [6] (🦥..🦪) sloth..oyster 679 | 1F9AB..1F9AD ; Emoji_Presentation # E13.0 [3] (🦫..🦭) beaver..seal 680 | 1F9AE..1F9AF ; Emoji_Presentation # E12.0 [2] (🦮..🦯) guide dog..white cane 681 | 1F9B0..1F9B9 ; Emoji_Presentation # E11.0 [10] (🦰..🦹) red hair..supervillain 682 | 1F9BA..1F9BF ; Emoji_Presentation # E12.0 [6] (🦺..🦿) safety vest..mechanical leg 683 | 1F9C0 ; Emoji_Presentation # E1.0 [1] (🧀) cheese wedge 684 | 1F9C1..1F9C2 ; Emoji_Presentation # E11.0 [2] (🧁..🧂) cupcake..salt 685 | 1F9C3..1F9CA ; Emoji_Presentation # E12.0 [8] (🧃..🧊) beverage box..ice 686 | 1F9CB ; Emoji_Presentation # E13.0 [1] (🧋) bubble tea 687 | 1F9CC ; Emoji_Presentation # E14.0 [1] (🧌) troll 688 | 1F9CD..1F9CF ; Emoji_Presentation # E12.0 [3] (🧍..🧏) person standing..deaf person 689 | 1F9D0..1F9E6 ; Emoji_Presentation # E5.0 [23] (🧐..🧦) face with monocle..socks 690 | 1F9E7..1F9FF ; Emoji_Presentation # E11.0 [25] (🧧..🧿) red envelope..nazar amulet 691 | 1FA70..1FA73 ; Emoji_Presentation # E12.0 [4] (🩰..🩳) ballet shoes..shorts 692 | 1FA74 ; Emoji_Presentation # E13.0 [1] (🩴) thong sandal 693 | 1FA75..1FA77 ; Emoji_Presentation # E15.0 [3] (🩵..🩷) light blue heart..pink heart 694 | 1FA78..1FA7A ; Emoji_Presentation # E12.0 [3] (🩸..🩺) drop of blood..stethoscope 695 | 1FA7B..1FA7C ; Emoji_Presentation # E14.0 [2] (🩻..🩼) x-ray..crutch 696 | 1FA80..1FA82 ; Emoji_Presentation # E12.0 [3] (🪀..🪂) yo-yo..parachute 697 | 1FA83..1FA86 ; Emoji_Presentation # E13.0 [4] (🪃..🪆) boomerang..nesting dolls 698 | 1FA87..1FA88 ; Emoji_Presentation # E15.0 [2] (🪇..🪈) maracas..flute 699 | 1FA90..1FA95 ; Emoji_Presentation # E12.0 [6] (🪐..🪕) ringed planet..banjo 700 | 1FA96..1FAA8 ; Emoji_Presentation # E13.0 [19] (🪖..🪨) military helmet..rock 701 | 1FAA9..1FAAC ; Emoji_Presentation # E14.0 [4] (🪩..🪬) mirror ball..hamsa 702 | 1FAAD..1FAAF ; Emoji_Presentation # E15.0 [3] (🪭..🪯) folding hand fan..khanda 703 | 1FAB0..1FAB6 ; Emoji_Presentation # E13.0 [7] (🪰..🪶) fly..feather 704 | 1FAB7..1FABA ; Emoji_Presentation # E14.0 [4] (🪷..🪺) lotus..nest with eggs 705 | 1FABB..1FABD ; Emoji_Presentation # E15.0 [3] (🪻..🪽) hyacinth..wing 706 | 1FABF ; Emoji_Presentation # E15.0 [1] (🪿) goose 707 | 1FAC0..1FAC2 ; Emoji_Presentation # E13.0 [3] (🫀..🫂) anatomical heart..people hugging 708 | 1FAC3..1FAC5 ; Emoji_Presentation # E14.0 [3] (🫃..🫅) pregnant man..person with crown 709 | 1FACE..1FACF ; Emoji_Presentation # E15.0 [2] (🫎..🫏) moose..donkey 710 | 1FAD0..1FAD6 ; Emoji_Presentation # E13.0 [7] (🫐..🫖) blueberries..teapot 711 | 1FAD7..1FAD9 ; Emoji_Presentation # E14.0 [3] (🫗..🫙) pouring liquid..jar 712 | 1FADA..1FADB ; Emoji_Presentation # E15.0 [2] (🫚..🫛) ginger root..pea pod 713 | 1FAE0..1FAE7 ; Emoji_Presentation # E14.0 [8] (🫠..🫧) melting face..bubbles 714 | 1FAE8 ; Emoji_Presentation # E15.0 [1] (🫨) shaking face 715 | 1FAF0..1FAF6 ; Emoji_Presentation # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 716 | 1FAF7..1FAF8 ; Emoji_Presentation # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 717 | 718 | # Total elements: 1205 719 | 720 | # ================================================ 721 | 722 | # All omitted code points have Emoji_Modifier=No 723 | 724 | 1F3FB..1F3FF ; Emoji_Modifier # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone 725 | 726 | # Total elements: 5 727 | 728 | # ================================================ 729 | 730 | # All omitted code points have Emoji_Modifier_Base=No 731 | 732 | 261D ; Emoji_Modifier_Base # E0.6 [1] (☝️) index pointing up 733 | 26F9 ; Emoji_Modifier_Base # E0.7 [1] (⛹️) person bouncing ball 734 | 270A..270C ; Emoji_Modifier_Base # E0.6 [3] (✊..✌️) raised fist..victory hand 735 | 270D ; Emoji_Modifier_Base # E0.7 [1] (✍️) writing hand 736 | 1F385 ; Emoji_Modifier_Base # E0.6 [1] (🎅) Santa Claus 737 | 1F3C2..1F3C4 ; Emoji_Modifier_Base # E0.6 [3] (🏂..🏄) snowboarder..person surfing 738 | 1F3C7 ; Emoji_Modifier_Base # E1.0 [1] (🏇) horse racing 739 | 1F3CA ; Emoji_Modifier_Base # E0.6 [1] (🏊) person swimming 740 | 1F3CB..1F3CC ; Emoji_Modifier_Base # E0.7 [2] (🏋️..🏌️) person lifting weights..person golfing 741 | 1F442..1F443 ; Emoji_Modifier_Base # E0.6 [2] (👂..👃) ear..nose 742 | 1F446..1F450 ; Emoji_Modifier_Base # E0.6 [11] (👆..👐) backhand index pointing up..open hands 743 | 1F466..1F46B ; Emoji_Modifier_Base # E0.6 [6] (👦..👫) boy..woman and man holding hands 744 | 1F46C..1F46D ; Emoji_Modifier_Base # E1.0 [2] (👬..👭) men holding hands..women holding hands 745 | 1F46E..1F478 ; Emoji_Modifier_Base # E0.6 [11] (👮..👸) police officer..princess 746 | 1F47C ; Emoji_Modifier_Base # E0.6 [1] (👼) baby angel 747 | 1F481..1F483 ; Emoji_Modifier_Base # E0.6 [3] (💁..💃) person tipping hand..woman dancing 748 | 1F485..1F487 ; Emoji_Modifier_Base # E0.6 [3] (💅..💇) nail polish..person getting haircut 749 | 1F48F ; Emoji_Modifier_Base # E0.6 [1] (💏) kiss 750 | 1F491 ; Emoji_Modifier_Base # E0.6 [1] (💑) couple with heart 751 | 1F4AA ; Emoji_Modifier_Base # E0.6 [1] (💪) flexed biceps 752 | 1F574..1F575 ; Emoji_Modifier_Base # E0.7 [2] (🕴️..🕵️) person in suit levitating..detective 753 | 1F57A ; Emoji_Modifier_Base # E3.0 [1] (🕺) man dancing 754 | 1F590 ; Emoji_Modifier_Base # E0.7 [1] (🖐️) hand with fingers splayed 755 | 1F595..1F596 ; Emoji_Modifier_Base # E1.0 [2] (🖕..🖖) middle finger..vulcan salute 756 | 1F645..1F647 ; Emoji_Modifier_Base # E0.6 [3] (🙅..🙇) person gesturing NO..person bowing 757 | 1F64B..1F64F ; Emoji_Modifier_Base # E0.6 [5] (🙋..🙏) person raising hand..folded hands 758 | 1F6A3 ; Emoji_Modifier_Base # E1.0 [1] (🚣) person rowing boat 759 | 1F6B4..1F6B5 ; Emoji_Modifier_Base # E1.0 [2] (🚴..🚵) person biking..person mountain biking 760 | 1F6B6 ; Emoji_Modifier_Base # E0.6 [1] (🚶) person walking 761 | 1F6C0 ; Emoji_Modifier_Base # E0.6 [1] (🛀) person taking bath 762 | 1F6CC ; Emoji_Modifier_Base # E1.0 [1] (🛌) person in bed 763 | 1F90C ; Emoji_Modifier_Base # E13.0 [1] (🤌) pinched fingers 764 | 1F90F ; Emoji_Modifier_Base # E12.0 [1] (🤏) pinching hand 765 | 1F918 ; Emoji_Modifier_Base # E1.0 [1] (🤘) sign of the horns 766 | 1F919..1F91E ; Emoji_Modifier_Base # E3.0 [6] (🤙..🤞) call me hand..crossed fingers 767 | 1F91F ; Emoji_Modifier_Base # E5.0 [1] (🤟) love-you gesture 768 | 1F926 ; Emoji_Modifier_Base # E3.0 [1] (🤦) person facepalming 769 | 1F930 ; Emoji_Modifier_Base # E3.0 [1] (🤰) pregnant woman 770 | 1F931..1F932 ; Emoji_Modifier_Base # E5.0 [2] (🤱..🤲) breast-feeding..palms up together 771 | 1F933..1F939 ; Emoji_Modifier_Base # E3.0 [7] (🤳..🤹) selfie..person juggling 772 | 1F93C..1F93E ; Emoji_Modifier_Base # E3.0 [3] (🤼..🤾) people wrestling..person playing handball 773 | 1F977 ; Emoji_Modifier_Base # E13.0 [1] (🥷) ninja 774 | 1F9B5..1F9B6 ; Emoji_Modifier_Base # E11.0 [2] (🦵..🦶) leg..foot 775 | 1F9B8..1F9B9 ; Emoji_Modifier_Base # E11.0 [2] (🦸..🦹) superhero..supervillain 776 | 1F9BB ; Emoji_Modifier_Base # E12.0 [1] (🦻) ear with hearing aid 777 | 1F9CD..1F9CF ; Emoji_Modifier_Base # E12.0 [3] (🧍..🧏) person standing..deaf person 778 | 1F9D1..1F9DD ; Emoji_Modifier_Base # E5.0 [13] (🧑..🧝) person..elf 779 | 1FAC3..1FAC5 ; Emoji_Modifier_Base # E14.0 [3] (🫃..🫅) pregnant man..person with crown 780 | 1FAF0..1FAF6 ; Emoji_Modifier_Base # E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 781 | 1FAF7..1FAF8 ; Emoji_Modifier_Base # E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 782 | 783 | # Total elements: 134 784 | 785 | # ================================================ 786 | 787 | # All omitted code points have Emoji_Component=No 788 | 789 | 0023 ; Emoji_Component # E0.0 [1] (#️) hash sign 790 | 002A ; Emoji_Component # E0.0 [1] (*️) asterisk 791 | 0030..0039 ; Emoji_Component # E0.0 [10] (0️..9️) digit zero..digit nine 792 | 200D ; Emoji_Component # E0.0 [1] (‍) zero width joiner 793 | 20E3 ; Emoji_Component # E0.0 [1] (⃣) combining enclosing keycap 794 | FE0F ; Emoji_Component # E0.0 [1] () VARIATION SELECTOR-16 795 | 1F1E6..1F1FF ; Emoji_Component # E0.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z 796 | 1F3FB..1F3FF ; Emoji_Component # E1.0 [5] (🏻..🏿) light skin tone..dark skin tone 797 | 1F9B0..1F9B3 ; Emoji_Component # E11.0 [4] (🦰..🦳) red hair..white hair 798 | E0020..E007F ; Emoji_Component # E0.0 [96] (󠀠..󠁿) tag space..cancel tag 799 | 800 | # Total elements: 146 801 | 802 | # ================================================ 803 | 804 | # All omitted code points have Extended_Pictographic=No 805 | 806 | 00A9 ; Extended_Pictographic# E0.6 [1] (©️) copyright 807 | 00AE ; Extended_Pictographic# E0.6 [1] (®️) registered 808 | 203C ; Extended_Pictographic# E0.6 [1] (‼️) double exclamation mark 809 | 2049 ; Extended_Pictographic# E0.6 [1] (⁉️) exclamation question mark 810 | 2122 ; Extended_Pictographic# E0.6 [1] (™️) trade mark 811 | 2139 ; Extended_Pictographic# E0.6 [1] (ℹ️) information 812 | 2194..2199 ; Extended_Pictographic# E0.6 [6] (↔️..↙️) left-right arrow..down-left arrow 813 | 21A9..21AA ; Extended_Pictographic# E0.6 [2] (↩️..↪️) right arrow curving left..left arrow curving right 814 | 231A..231B ; Extended_Pictographic# E0.6 [2] (⌚..⌛) watch..hourglass done 815 | 2328 ; Extended_Pictographic# E1.0 [1] (⌨️) keyboard 816 | 2388 ; Extended_Pictographic# E0.0 [1] (⎈) HELM SYMBOL 817 | 23CF ; Extended_Pictographic# E1.0 [1] (⏏️) eject button 818 | 23E9..23EC ; Extended_Pictographic# E0.6 [4] (⏩..⏬) fast-forward button..fast down button 819 | 23ED..23EE ; Extended_Pictographic# E0.7 [2] (⏭️..⏮️) next track button..last track button 820 | 23EF ; Extended_Pictographic# E1.0 [1] (⏯️) play or pause button 821 | 23F0 ; Extended_Pictographic# E0.6 [1] (⏰) alarm clock 822 | 23F1..23F2 ; Extended_Pictographic# E1.0 [2] (⏱️..⏲️) stopwatch..timer clock 823 | 23F3 ; Extended_Pictographic# E0.6 [1] (⏳) hourglass not done 824 | 23F8..23FA ; Extended_Pictographic# E0.7 [3] (⏸️..⏺️) pause button..record button 825 | 24C2 ; Extended_Pictographic# E0.6 [1] (Ⓜ️) circled M 826 | 25AA..25AB ; Extended_Pictographic# E0.6 [2] (▪️..▫️) black small square..white small square 827 | 25B6 ; Extended_Pictographic# E0.6 [1] (▶️) play button 828 | 25C0 ; Extended_Pictographic# E0.6 [1] (◀️) reverse button 829 | 25FB..25FE ; Extended_Pictographic# E0.6 [4] (◻️..◾) white medium square..black medium-small square 830 | 2600..2601 ; Extended_Pictographic# E0.6 [2] (☀️..☁️) sun..cloud 831 | 2602..2603 ; Extended_Pictographic# E0.7 [2] (☂️..☃️) umbrella..snowman 832 | 2604 ; Extended_Pictographic# E1.0 [1] (☄️) comet 833 | 2605 ; Extended_Pictographic# E0.0 [1] (★) BLACK STAR 834 | 2607..260D ; Extended_Pictographic# E0.0 [7] (☇..☍) LIGHTNING..OPPOSITION 835 | 260E ; Extended_Pictographic# E0.6 [1] (☎️) telephone 836 | 260F..2610 ; Extended_Pictographic# E0.0 [2] (☏..☐) WHITE TELEPHONE..BALLOT BOX 837 | 2611 ; Extended_Pictographic# E0.6 [1] (☑️) check box with check 838 | 2612 ; Extended_Pictographic# E0.0 [1] (☒) BALLOT BOX WITH X 839 | 2614..2615 ; Extended_Pictographic# E0.6 [2] (☔..☕) umbrella with rain drops..hot beverage 840 | 2616..2617 ; Extended_Pictographic# E0.0 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE 841 | 2618 ; Extended_Pictographic# E1.0 [1] (☘️) shamrock 842 | 2619..261C ; Extended_Pictographic# E0.0 [4] (☙..☜) REVERSED ROTATED FLORAL HEART BULLET..WHITE LEFT POINTING INDEX 843 | 261D ; Extended_Pictographic# E0.6 [1] (☝️) index pointing up 844 | 261E..261F ; Extended_Pictographic# E0.0 [2] (☞..☟) WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX 845 | 2620 ; Extended_Pictographic# E1.0 [1] (☠️) skull and crossbones 846 | 2621 ; Extended_Pictographic# E0.0 [1] (☡) CAUTION SIGN 847 | 2622..2623 ; Extended_Pictographic# E1.0 [2] (☢️..☣️) radioactive..biohazard 848 | 2624..2625 ; Extended_Pictographic# E0.0 [2] (☤..☥) CADUCEUS..ANKH 849 | 2626 ; Extended_Pictographic# E1.0 [1] (☦️) orthodox cross 850 | 2627..2629 ; Extended_Pictographic# E0.0 [3] (☧..☩) CHI RHO..CROSS OF JERUSALEM 851 | 262A ; Extended_Pictographic# E0.7 [1] (☪️) star and crescent 852 | 262B..262D ; Extended_Pictographic# E0.0 [3] (☫..☭) FARSI SYMBOL..HAMMER AND SICKLE 853 | 262E ; Extended_Pictographic# E1.0 [1] (☮️) peace symbol 854 | 262F ; Extended_Pictographic# E0.7 [1] (☯️) yin yang 855 | 2630..2637 ; Extended_Pictographic# E0.0 [8] (☰..☷) TRIGRAM FOR HEAVEN..TRIGRAM FOR EARTH 856 | 2638..2639 ; Extended_Pictographic# E0.7 [2] (☸️..☹️) wheel of dharma..frowning face 857 | 263A ; Extended_Pictographic# E0.6 [1] (☺️) smiling face 858 | 263B..263F ; Extended_Pictographic# E0.0 [5] (☻..☿) BLACK SMILING FACE..MERCURY 859 | 2640 ; Extended_Pictographic# E4.0 [1] (♀️) female sign 860 | 2641 ; Extended_Pictographic# E0.0 [1] (♁) EARTH 861 | 2642 ; Extended_Pictographic# E4.0 [1] (♂️) male sign 862 | 2643..2647 ; Extended_Pictographic# E0.0 [5] (♃..♇) JUPITER..PLUTO 863 | 2648..2653 ; Extended_Pictographic# E0.6 [12] (♈..♓) Aries..Pisces 864 | 2654..265E ; Extended_Pictographic# E0.0 [11] (♔..♞) WHITE CHESS KING..BLACK CHESS KNIGHT 865 | 265F ; Extended_Pictographic# E11.0 [1] (♟️) chess pawn 866 | 2660 ; Extended_Pictographic# E0.6 [1] (♠️) spade suit 867 | 2661..2662 ; Extended_Pictographic# E0.0 [2] (♡..♢) WHITE HEART SUIT..WHITE DIAMOND SUIT 868 | 2663 ; Extended_Pictographic# E0.6 [1] (♣️) club suit 869 | 2664 ; Extended_Pictographic# E0.0 [1] (♤) WHITE SPADE SUIT 870 | 2665..2666 ; Extended_Pictographic# E0.6 [2] (♥️..♦️) heart suit..diamond suit 871 | 2667 ; Extended_Pictographic# E0.0 [1] (♧) WHITE CLUB SUIT 872 | 2668 ; Extended_Pictographic# E0.6 [1] (♨️) hot springs 873 | 2669..267A ; Extended_Pictographic# E0.0 [18] (♩..♺) QUARTER NOTE..RECYCLING SYMBOL FOR GENERIC MATERIALS 874 | 267B ; Extended_Pictographic# E0.6 [1] (♻️) recycling symbol 875 | 267C..267D ; Extended_Pictographic# E0.0 [2] (♼..♽) RECYCLED PAPER SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL 876 | 267E ; Extended_Pictographic# E11.0 [1] (♾️) infinity 877 | 267F ; Extended_Pictographic# E0.6 [1] (♿) wheelchair symbol 878 | 2680..2685 ; Extended_Pictographic# E0.0 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6 879 | 2690..2691 ; Extended_Pictographic# E0.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG 880 | 2692 ; Extended_Pictographic# E1.0 [1] (⚒️) hammer and pick 881 | 2693 ; Extended_Pictographic# E0.6 [1] (⚓) anchor 882 | 2694 ; Extended_Pictographic# E1.0 [1] (⚔️) crossed swords 883 | 2695 ; Extended_Pictographic# E4.0 [1] (⚕️) medical symbol 884 | 2696..2697 ; Extended_Pictographic# E1.0 [2] (⚖️..⚗️) balance scale..alembic 885 | 2698 ; Extended_Pictographic# E0.0 [1] (⚘) FLOWER 886 | 2699 ; Extended_Pictographic# E1.0 [1] (⚙️) gear 887 | 269A ; Extended_Pictographic# E0.0 [1] (⚚) STAFF OF HERMES 888 | 269B..269C ; Extended_Pictographic# E1.0 [2] (⚛️..⚜️) atom symbol..fleur-de-lis 889 | 269D..269F ; Extended_Pictographic# E0.0 [3] (⚝..⚟) OUTLINED WHITE STAR..THREE LINES CONVERGING LEFT 890 | 26A0..26A1 ; Extended_Pictographic# E0.6 [2] (⚠️..⚡) warning..high voltage 891 | 26A2..26A6 ; Extended_Pictographic# E0.0 [5] (⚢..⚦) DOUBLED FEMALE SIGN..MALE WITH STROKE SIGN 892 | 26A7 ; Extended_Pictographic# E13.0 [1] (⚧️) transgender symbol 893 | 26A8..26A9 ; Extended_Pictographic# E0.0 [2] (⚨..⚩) VERTICAL MALE WITH STROKE SIGN..HORIZONTAL MALE WITH STROKE SIGN 894 | 26AA..26AB ; Extended_Pictographic# E0.6 [2] (⚪..⚫) white circle..black circle 895 | 26AC..26AF ; Extended_Pictographic# E0.0 [4] (⚬..⚯) MEDIUM SMALL WHITE CIRCLE..UNMARRIED PARTNERSHIP SYMBOL 896 | 26B0..26B1 ; Extended_Pictographic# E1.0 [2] (⚰️..⚱️) coffin..funeral urn 897 | 26B2..26BC ; Extended_Pictographic# E0.0 [11] (⚲..⚼) NEUTER..SESQUIQUADRATE 898 | 26BD..26BE ; Extended_Pictographic# E0.6 [2] (⚽..⚾) soccer ball..baseball 899 | 26BF..26C3 ; Extended_Pictographic# E0.0 [5] (⚿..⛃) SQUARED KEY..BLACK DRAUGHTS KING 900 | 26C4..26C5 ; Extended_Pictographic# E0.6 [2] (⛄..⛅) snowman without snow..sun behind cloud 901 | 26C6..26C7 ; Extended_Pictographic# E0.0 [2] (⛆..⛇) RAIN..BLACK SNOWMAN 902 | 26C8 ; Extended_Pictographic# E0.7 [1] (⛈️) cloud with lightning and rain 903 | 26C9..26CD ; Extended_Pictographic# E0.0 [5] (⛉..⛍) TURNED WHITE SHOGI PIECE..DISABLED CAR 904 | 26CE ; Extended_Pictographic# E0.6 [1] (⛎) Ophiuchus 905 | 26CF ; Extended_Pictographic# E0.7 [1] (⛏️) pick 906 | 26D0 ; Extended_Pictographic# E0.0 [1] (⛐) CAR SLIDING 907 | 26D1 ; Extended_Pictographic# E0.7 [1] (⛑️) rescue worker’s helmet 908 | 26D2 ; Extended_Pictographic# E0.0 [1] (⛒) CIRCLED CROSSING LANES 909 | 26D3 ; Extended_Pictographic# E0.7 [1] (⛓️) chains 910 | 26D4 ; Extended_Pictographic# E0.6 [1] (⛔) no entry 911 | 26D5..26E8 ; Extended_Pictographic# E0.0 [20] (⛕..⛨) ALTERNATE ONE-WAY LEFT WAY TRAFFIC..BLACK CROSS ON SHIELD 912 | 26E9 ; Extended_Pictographic# E0.7 [1] (⛩️) shinto shrine 913 | 26EA ; Extended_Pictographic# E0.6 [1] (⛪) church 914 | 26EB..26EF ; Extended_Pictographic# E0.0 [5] (⛫..⛯) CASTLE..MAP SYMBOL FOR LIGHTHOUSE 915 | 26F0..26F1 ; Extended_Pictographic# E0.7 [2] (⛰️..⛱️) mountain..umbrella on ground 916 | 26F2..26F3 ; Extended_Pictographic# E0.6 [2] (⛲..⛳) fountain..flag in hole 917 | 26F4 ; Extended_Pictographic# E0.7 [1] (⛴️) ferry 918 | 26F5 ; Extended_Pictographic# E0.6 [1] (⛵) sailboat 919 | 26F6 ; Extended_Pictographic# E0.0 [1] (⛶) SQUARE FOUR CORNERS 920 | 26F7..26F9 ; Extended_Pictographic# E0.7 [3] (⛷️..⛹️) skier..person bouncing ball 921 | 26FA ; Extended_Pictographic# E0.6 [1] (⛺) tent 922 | 26FB..26FC ; Extended_Pictographic# E0.0 [2] (⛻..⛼) JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL 923 | 26FD ; Extended_Pictographic# E0.6 [1] (⛽) fuel pump 924 | 26FE..2701 ; Extended_Pictographic# E0.0 [4] (⛾..✁) CUP ON BLACK SQUARE..UPPER BLADE SCISSORS 925 | 2702 ; Extended_Pictographic# E0.6 [1] (✂️) scissors 926 | 2703..2704 ; Extended_Pictographic# E0.0 [2] (✃..✄) LOWER BLADE SCISSORS..WHITE SCISSORS 927 | 2705 ; Extended_Pictographic# E0.6 [1] (✅) check mark button 928 | 2708..270C ; Extended_Pictographic# E0.6 [5] (✈️..✌️) airplane..victory hand 929 | 270D ; Extended_Pictographic# E0.7 [1] (✍️) writing hand 930 | 270E ; Extended_Pictographic# E0.0 [1] (✎) LOWER RIGHT PENCIL 931 | 270F ; Extended_Pictographic# E0.6 [1] (✏️) pencil 932 | 2710..2711 ; Extended_Pictographic# E0.0 [2] (✐..✑) UPPER RIGHT PENCIL..WHITE NIB 933 | 2712 ; Extended_Pictographic# E0.6 [1] (✒️) black nib 934 | 2714 ; Extended_Pictographic# E0.6 [1] (✔️) check mark 935 | 2716 ; Extended_Pictographic# E0.6 [1] (✖️) multiply 936 | 271D ; Extended_Pictographic# E0.7 [1] (✝️) latin cross 937 | 2721 ; Extended_Pictographic# E0.7 [1] (✡️) star of David 938 | 2728 ; Extended_Pictographic# E0.6 [1] (✨) sparkles 939 | 2733..2734 ; Extended_Pictographic# E0.6 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star 940 | 2744 ; Extended_Pictographic# E0.6 [1] (❄️) snowflake 941 | 2747 ; Extended_Pictographic# E0.6 [1] (❇️) sparkle 942 | 274C ; Extended_Pictographic# E0.6 [1] (❌) cross mark 943 | 274E ; Extended_Pictographic# E0.6 [1] (❎) cross mark button 944 | 2753..2755 ; Extended_Pictographic# E0.6 [3] (❓..❕) red question mark..white exclamation mark 945 | 2757 ; Extended_Pictographic# E0.6 [1] (❗) red exclamation mark 946 | 2763 ; Extended_Pictographic# E1.0 [1] (❣️) heart exclamation 947 | 2764 ; Extended_Pictographic# E0.6 [1] (❤️) red heart 948 | 2765..2767 ; Extended_Pictographic# E0.0 [3] (❥..❧) ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET 949 | 2795..2797 ; Extended_Pictographic# E0.6 [3] (➕..➗) plus..divide 950 | 27A1 ; Extended_Pictographic# E0.6 [1] (➡️) right arrow 951 | 27B0 ; Extended_Pictographic# E0.6 [1] (➰) curly loop 952 | 27BF ; Extended_Pictographic# E1.0 [1] (➿) double curly loop 953 | 2934..2935 ; Extended_Pictographic# E0.6 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down 954 | 2B05..2B07 ; Extended_Pictographic# E0.6 [3] (⬅️..⬇️) left arrow..down arrow 955 | 2B1B..2B1C ; Extended_Pictographic# E0.6 [2] (⬛..⬜) black large square..white large square 956 | 2B50 ; Extended_Pictographic# E0.6 [1] (⭐) star 957 | 2B55 ; Extended_Pictographic# E0.6 [1] (⭕) hollow red circle 958 | 3030 ; Extended_Pictographic# E0.6 [1] (〰️) wavy dash 959 | 303D ; Extended_Pictographic# E0.6 [1] (〽️) part alternation mark 960 | 3297 ; Extended_Pictographic# E0.6 [1] (㊗️) Japanese “congratulations” button 961 | 3299 ; Extended_Pictographic# E0.6 [1] (㊙️) Japanese “secret” button 962 | 1F000..1F003 ; Extended_Pictographic# E0.0 [4] (🀀..🀃) MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND 963 | 1F004 ; Extended_Pictographic# E0.6 [1] (🀄) mahjong red dragon 964 | 1F005..1F0CE ; Extended_Pictographic# E0.0 [202] (🀅..🃎) MAHJONG TILE GREEN DRAGON..PLAYING CARD KING OF DIAMONDS 965 | 1F0CF ; Extended_Pictographic# E0.6 [1] (🃏) joker 966 | 1F0D0..1F0FF ; Extended_Pictographic# E0.0 [48] (🃐..🃿) .. 967 | 1F10D..1F10F ; Extended_Pictographic# E0.0 [3] (🄍..🄏) CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 968 | 1F12F ; Extended_Pictographic# E0.0 [1] (🄯) COPYLEFT SYMBOL 969 | 1F16C..1F16F ; Extended_Pictographic# E0.0 [4] (🅬..🅯) RAISED MR SIGN..CIRCLED HUMAN FIGURE 970 | 1F170..1F171 ; Extended_Pictographic# E0.6 [2] (🅰️..🅱️) A button (blood type)..B button (blood type) 971 | 1F17E..1F17F ; Extended_Pictographic# E0.6 [2] (🅾️..🅿️) O button (blood type)..P button 972 | 1F18E ; Extended_Pictographic# E0.6 [1] (🆎) AB button (blood type) 973 | 1F191..1F19A ; Extended_Pictographic# E0.6 [10] (🆑..🆚) CL button..VS button 974 | 1F1AD..1F1E5 ; Extended_Pictographic# E0.0 [57] (🆭..🇥) MASK WORK SYMBOL.. 975 | 1F201..1F202 ; Extended_Pictographic# E0.6 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button 976 | 1F203..1F20F ; Extended_Pictographic# E0.0 [13] (🈃..🈏) .. 977 | 1F21A ; Extended_Pictographic# E0.6 [1] (🈚) Japanese “free of charge” button 978 | 1F22F ; Extended_Pictographic# E0.6 [1] (🈯) Japanese “reserved” button 979 | 1F232..1F23A ; Extended_Pictographic# E0.6 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button 980 | 1F23C..1F23F ; Extended_Pictographic# E0.0 [4] (🈼..🈿) .. 981 | 1F249..1F24F ; Extended_Pictographic# E0.0 [7] (🉉..🉏) .. 982 | 1F250..1F251 ; Extended_Pictographic# E0.6 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button 983 | 1F252..1F2FF ; Extended_Pictographic# E0.0 [174] (🉒..🋿) .. 984 | 1F300..1F30C ; Extended_Pictographic# E0.6 [13] (🌀..🌌) cyclone..milky way 985 | 1F30D..1F30E ; Extended_Pictographic# E0.7 [2] (🌍..🌎) globe showing Europe-Africa..globe showing Americas 986 | 1F30F ; Extended_Pictographic# E0.6 [1] (🌏) globe showing Asia-Australia 987 | 1F310 ; Extended_Pictographic# E1.0 [1] (🌐) globe with meridians 988 | 1F311 ; Extended_Pictographic# E0.6 [1] (🌑) new moon 989 | 1F312 ; Extended_Pictographic# E1.0 [1] (🌒) waxing crescent moon 990 | 1F313..1F315 ; Extended_Pictographic# E0.6 [3] (🌓..🌕) first quarter moon..full moon 991 | 1F316..1F318 ; Extended_Pictographic# E1.0 [3] (🌖..🌘) waning gibbous moon..waning crescent moon 992 | 1F319 ; Extended_Pictographic# E0.6 [1] (🌙) crescent moon 993 | 1F31A ; Extended_Pictographic# E1.0 [1] (🌚) new moon face 994 | 1F31B ; Extended_Pictographic# E0.6 [1] (🌛) first quarter moon face 995 | 1F31C ; Extended_Pictographic# E0.7 [1] (🌜) last quarter moon face 996 | 1F31D..1F31E ; Extended_Pictographic# E1.0 [2] (🌝..🌞) full moon face..sun with face 997 | 1F31F..1F320 ; Extended_Pictographic# E0.6 [2] (🌟..🌠) glowing star..shooting star 998 | 1F321 ; Extended_Pictographic# E0.7 [1] (🌡️) thermometer 999 | 1F322..1F323 ; Extended_Pictographic# E0.0 [2] (🌢..🌣) BLACK DROPLET..WHITE SUN 1000 | 1F324..1F32C ; Extended_Pictographic# E0.7 [9] (🌤️..🌬️) sun behind small cloud..wind face 1001 | 1F32D..1F32F ; Extended_Pictographic# E1.0 [3] (🌭..🌯) hot dog..burrito 1002 | 1F330..1F331 ; Extended_Pictographic# E0.6 [2] (🌰..🌱) chestnut..seedling 1003 | 1F332..1F333 ; Extended_Pictographic# E1.0 [2] (🌲..🌳) evergreen tree..deciduous tree 1004 | 1F334..1F335 ; Extended_Pictographic# E0.6 [2] (🌴..🌵) palm tree..cactus 1005 | 1F336 ; Extended_Pictographic# E0.7 [1] (🌶️) hot pepper 1006 | 1F337..1F34A ; Extended_Pictographic# E0.6 [20] (🌷..🍊) tulip..tangerine 1007 | 1F34B ; Extended_Pictographic# E1.0 [1] (🍋) lemon 1008 | 1F34C..1F34F ; Extended_Pictographic# E0.6 [4] (🍌..🍏) banana..green apple 1009 | 1F350 ; Extended_Pictographic# E1.0 [1] (🍐) pear 1010 | 1F351..1F37B ; Extended_Pictographic# E0.6 [43] (🍑..🍻) peach..clinking beer mugs 1011 | 1F37C ; Extended_Pictographic# E1.0 [1] (🍼) baby bottle 1012 | 1F37D ; Extended_Pictographic# E0.7 [1] (🍽️) fork and knife with plate 1013 | 1F37E..1F37F ; Extended_Pictographic# E1.0 [2] (🍾..🍿) bottle with popping cork..popcorn 1014 | 1F380..1F393 ; Extended_Pictographic# E0.6 [20] (🎀..🎓) ribbon..graduation cap 1015 | 1F394..1F395 ; Extended_Pictographic# E0.0 [2] (🎔..🎕) HEART WITH TIP ON THE LEFT..BOUQUET OF FLOWERS 1016 | 1F396..1F397 ; Extended_Pictographic# E0.7 [2] (🎖️..🎗️) military medal..reminder ribbon 1017 | 1F398 ; Extended_Pictographic# E0.0 [1] (🎘) MUSICAL KEYBOARD WITH JACKS 1018 | 1F399..1F39B ; Extended_Pictographic# E0.7 [3] (🎙️..🎛️) studio microphone..control knobs 1019 | 1F39C..1F39D ; Extended_Pictographic# E0.0 [2] (🎜..🎝) BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES 1020 | 1F39E..1F39F ; Extended_Pictographic# E0.7 [2] (🎞️..🎟️) film frames..admission tickets 1021 | 1F3A0..1F3C4 ; Extended_Pictographic# E0.6 [37] (🎠..🏄) carousel horse..person surfing 1022 | 1F3C5 ; Extended_Pictographic# E1.0 [1] (🏅) sports medal 1023 | 1F3C6 ; Extended_Pictographic# E0.6 [1] (🏆) trophy 1024 | 1F3C7 ; Extended_Pictographic# E1.0 [1] (🏇) horse racing 1025 | 1F3C8 ; Extended_Pictographic# E0.6 [1] (🏈) american football 1026 | 1F3C9 ; Extended_Pictographic# E1.0 [1] (🏉) rugby football 1027 | 1F3CA ; Extended_Pictographic# E0.6 [1] (🏊) person swimming 1028 | 1F3CB..1F3CE ; Extended_Pictographic# E0.7 [4] (🏋️..🏎️) person lifting weights..racing car 1029 | 1F3CF..1F3D3 ; Extended_Pictographic# E1.0 [5] (🏏..🏓) cricket game..ping pong 1030 | 1F3D4..1F3DF ; Extended_Pictographic# E0.7 [12] (🏔️..🏟️) snow-capped mountain..stadium 1031 | 1F3E0..1F3E3 ; Extended_Pictographic# E0.6 [4] (🏠..🏣) house..Japanese post office 1032 | 1F3E4 ; Extended_Pictographic# E1.0 [1] (🏤) post office 1033 | 1F3E5..1F3F0 ; Extended_Pictographic# E0.6 [12] (🏥..🏰) hospital..castle 1034 | 1F3F1..1F3F2 ; Extended_Pictographic# E0.0 [2] (🏱..🏲) WHITE PENNANT..BLACK PENNANT 1035 | 1F3F3 ; Extended_Pictographic# E0.7 [1] (🏳️) white flag 1036 | 1F3F4 ; Extended_Pictographic# E1.0 [1] (🏴) black flag 1037 | 1F3F5 ; Extended_Pictographic# E0.7 [1] (🏵️) rosette 1038 | 1F3F6 ; Extended_Pictographic# E0.0 [1] (🏶) BLACK ROSETTE 1039 | 1F3F7 ; Extended_Pictographic# E0.7 [1] (🏷️) label 1040 | 1F3F8..1F3FA ; Extended_Pictographic# E1.0 [3] (🏸..🏺) badminton..amphora 1041 | 1F400..1F407 ; Extended_Pictographic# E1.0 [8] (🐀..🐇) rat..rabbit 1042 | 1F408 ; Extended_Pictographic# E0.7 [1] (🐈) cat 1043 | 1F409..1F40B ; Extended_Pictographic# E1.0 [3] (🐉..🐋) dragon..whale 1044 | 1F40C..1F40E ; Extended_Pictographic# E0.6 [3] (🐌..🐎) snail..horse 1045 | 1F40F..1F410 ; Extended_Pictographic# E1.0 [2] (🐏..🐐) ram..goat 1046 | 1F411..1F412 ; Extended_Pictographic# E0.6 [2] (🐑..🐒) ewe..monkey 1047 | 1F413 ; Extended_Pictographic# E1.0 [1] (🐓) rooster 1048 | 1F414 ; Extended_Pictographic# E0.6 [1] (🐔) chicken 1049 | 1F415 ; Extended_Pictographic# E0.7 [1] (🐕) dog 1050 | 1F416 ; Extended_Pictographic# E1.0 [1] (🐖) pig 1051 | 1F417..1F429 ; Extended_Pictographic# E0.6 [19] (🐗..🐩) boar..poodle 1052 | 1F42A ; Extended_Pictographic# E1.0 [1] (🐪) camel 1053 | 1F42B..1F43E ; Extended_Pictographic# E0.6 [20] (🐫..🐾) two-hump camel..paw prints 1054 | 1F43F ; Extended_Pictographic# E0.7 [1] (🐿️) chipmunk 1055 | 1F440 ; Extended_Pictographic# E0.6 [1] (👀) eyes 1056 | 1F441 ; Extended_Pictographic# E0.7 [1] (👁️) eye 1057 | 1F442..1F464 ; Extended_Pictographic# E0.6 [35] (👂..👤) ear..bust in silhouette 1058 | 1F465 ; Extended_Pictographic# E1.0 [1] (👥) busts in silhouette 1059 | 1F466..1F46B ; Extended_Pictographic# E0.6 [6] (👦..👫) boy..woman and man holding hands 1060 | 1F46C..1F46D ; Extended_Pictographic# E1.0 [2] (👬..👭) men holding hands..women holding hands 1061 | 1F46E..1F4AC ; Extended_Pictographic# E0.6 [63] (👮..💬) police officer..speech balloon 1062 | 1F4AD ; Extended_Pictographic# E1.0 [1] (💭) thought balloon 1063 | 1F4AE..1F4B5 ; Extended_Pictographic# E0.6 [8] (💮..💵) white flower..dollar banknote 1064 | 1F4B6..1F4B7 ; Extended_Pictographic# E1.0 [2] (💶..💷) euro banknote..pound banknote 1065 | 1F4B8..1F4EB ; Extended_Pictographic# E0.6 [52] (💸..📫) money with wings..closed mailbox with raised flag 1066 | 1F4EC..1F4ED ; Extended_Pictographic# E0.7 [2] (📬..📭) open mailbox with raised flag..open mailbox with lowered flag 1067 | 1F4EE ; Extended_Pictographic# E0.6 [1] (📮) postbox 1068 | 1F4EF ; Extended_Pictographic# E1.0 [1] (📯) postal horn 1069 | 1F4F0..1F4F4 ; Extended_Pictographic# E0.6 [5] (📰..📴) newspaper..mobile phone off 1070 | 1F4F5 ; Extended_Pictographic# E1.0 [1] (📵) no mobile phones 1071 | 1F4F6..1F4F7 ; Extended_Pictographic# E0.6 [2] (📶..📷) antenna bars..camera 1072 | 1F4F8 ; Extended_Pictographic# E1.0 [1] (📸) camera with flash 1073 | 1F4F9..1F4FC ; Extended_Pictographic# E0.6 [4] (📹..📼) video camera..videocassette 1074 | 1F4FD ; Extended_Pictographic# E0.7 [1] (📽️) film projector 1075 | 1F4FE ; Extended_Pictographic# E0.0 [1] (📾) PORTABLE STEREO 1076 | 1F4FF..1F502 ; Extended_Pictographic# E1.0 [4] (📿..🔂) prayer beads..repeat single button 1077 | 1F503 ; Extended_Pictographic# E0.6 [1] (🔃) clockwise vertical arrows 1078 | 1F504..1F507 ; Extended_Pictographic# E1.0 [4] (🔄..🔇) counterclockwise arrows button..muted speaker 1079 | 1F508 ; Extended_Pictographic# E0.7 [1] (🔈) speaker low volume 1080 | 1F509 ; Extended_Pictographic# E1.0 [1] (🔉) speaker medium volume 1081 | 1F50A..1F514 ; Extended_Pictographic# E0.6 [11] (🔊..🔔) speaker high volume..bell 1082 | 1F515 ; Extended_Pictographic# E1.0 [1] (🔕) bell with slash 1083 | 1F516..1F52B ; Extended_Pictographic# E0.6 [22] (🔖..🔫) bookmark..water pistol 1084 | 1F52C..1F52D ; Extended_Pictographic# E1.0 [2] (🔬..🔭) microscope..telescope 1085 | 1F52E..1F53D ; Extended_Pictographic# E0.6 [16] (🔮..🔽) crystal ball..downwards button 1086 | 1F546..1F548 ; Extended_Pictographic# E0.0 [3] (🕆..🕈) WHITE LATIN CROSS..CELTIC CROSS 1087 | 1F549..1F54A ; Extended_Pictographic# E0.7 [2] (🕉️..🕊️) om..dove 1088 | 1F54B..1F54E ; Extended_Pictographic# E1.0 [4] (🕋..🕎) kaaba..menorah 1089 | 1F54F ; Extended_Pictographic# E0.0 [1] (🕏) BOWL OF HYGIEIA 1090 | 1F550..1F55B ; Extended_Pictographic# E0.6 [12] (🕐..🕛) one o’clock..twelve o’clock 1091 | 1F55C..1F567 ; Extended_Pictographic# E0.7 [12] (🕜..🕧) one-thirty..twelve-thirty 1092 | 1F568..1F56E ; Extended_Pictographic# E0.0 [7] (🕨..🕮) RIGHT SPEAKER..BOOK 1093 | 1F56F..1F570 ; Extended_Pictographic# E0.7 [2] (🕯️..🕰️) candle..mantelpiece clock 1094 | 1F571..1F572 ; Extended_Pictographic# E0.0 [2] (🕱..🕲) BLACK SKULL AND CROSSBONES..NO PIRACY 1095 | 1F573..1F579 ; Extended_Pictographic# E0.7 [7] (🕳️..🕹️) hole..joystick 1096 | 1F57A ; Extended_Pictographic# E3.0 [1] (🕺) man dancing 1097 | 1F57B..1F586 ; Extended_Pictographic# E0.0 [12] (🕻..🖆) LEFT HAND TELEPHONE RECEIVER..PEN OVER STAMPED ENVELOPE 1098 | 1F587 ; Extended_Pictographic# E0.7 [1] (🖇️) linked paperclips 1099 | 1F588..1F589 ; Extended_Pictographic# E0.0 [2] (🖈..🖉) BLACK PUSHPIN..LOWER LEFT PENCIL 1100 | 1F58A..1F58D ; Extended_Pictographic# E0.7 [4] (🖊️..🖍️) pen..crayon 1101 | 1F58E..1F58F ; Extended_Pictographic# E0.0 [2] (🖎..🖏) LEFT WRITING HAND..TURNED OK HAND SIGN 1102 | 1F590 ; Extended_Pictographic# E0.7 [1] (🖐️) hand with fingers splayed 1103 | 1F591..1F594 ; Extended_Pictographic# E0.0 [4] (🖑..🖔) REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND 1104 | 1F595..1F596 ; Extended_Pictographic# E1.0 [2] (🖕..🖖) middle finger..vulcan salute 1105 | 1F597..1F5A3 ; Extended_Pictographic# E0.0 [13] (🖗..🖣) WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX 1106 | 1F5A4 ; Extended_Pictographic# E3.0 [1] (🖤) black heart 1107 | 1F5A5 ; Extended_Pictographic# E0.7 [1] (🖥️) desktop computer 1108 | 1F5A6..1F5A7 ; Extended_Pictographic# E0.0 [2] (🖦..🖧) KEYBOARD AND MOUSE..THREE NETWORKED COMPUTERS 1109 | 1F5A8 ; Extended_Pictographic# E0.7 [1] (🖨️) printer 1110 | 1F5A9..1F5B0 ; Extended_Pictographic# E0.0 [8] (🖩..🖰) POCKET CALCULATOR..TWO BUTTON MOUSE 1111 | 1F5B1..1F5B2 ; Extended_Pictographic# E0.7 [2] (🖱️..🖲️) computer mouse..trackball 1112 | 1F5B3..1F5BB ; Extended_Pictographic# E0.0 [9] (🖳..🖻) OLD PERSONAL COMPUTER..DOCUMENT WITH PICTURE 1113 | 1F5BC ; Extended_Pictographic# E0.7 [1] (🖼️) framed picture 1114 | 1F5BD..1F5C1 ; Extended_Pictographic# E0.0 [5] (🖽..🗁) FRAME WITH TILES..OPEN FOLDER 1115 | 1F5C2..1F5C4 ; Extended_Pictographic# E0.7 [3] (🗂️..🗄️) card index dividers..file cabinet 1116 | 1F5C5..1F5D0 ; Extended_Pictographic# E0.0 [12] (🗅..🗐) EMPTY NOTE..PAGES 1117 | 1F5D1..1F5D3 ; Extended_Pictographic# E0.7 [3] (🗑️..🗓️) wastebasket..spiral calendar 1118 | 1F5D4..1F5DB ; Extended_Pictographic# E0.0 [8] (🗔..🗛) DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL 1119 | 1F5DC..1F5DE ; Extended_Pictographic# E0.7 [3] (🗜️..🗞️) clamp..rolled-up newspaper 1120 | 1F5DF..1F5E0 ; Extended_Pictographic# E0.0 [2] (🗟..🗠) PAGE WITH CIRCLED TEXT..STOCK CHART 1121 | 1F5E1 ; Extended_Pictographic# E0.7 [1] (🗡️) dagger 1122 | 1F5E2 ; Extended_Pictographic# E0.0 [1] (🗢) LIPS 1123 | 1F5E3 ; Extended_Pictographic# E0.7 [1] (🗣️) speaking head 1124 | 1F5E4..1F5E7 ; Extended_Pictographic# E0.0 [4] (🗤..🗧) THREE RAYS ABOVE..THREE RAYS RIGHT 1125 | 1F5E8 ; Extended_Pictographic# E2.0 [1] (🗨️) left speech bubble 1126 | 1F5E9..1F5EE ; Extended_Pictographic# E0.0 [6] (🗩..🗮) RIGHT SPEECH BUBBLE..LEFT ANGER BUBBLE 1127 | 1F5EF ; Extended_Pictographic# E0.7 [1] (🗯️) right anger bubble 1128 | 1F5F0..1F5F2 ; Extended_Pictographic# E0.0 [3] (🗰..🗲) MOOD BUBBLE..LIGHTNING MOOD 1129 | 1F5F3 ; Extended_Pictographic# E0.7 [1] (🗳️) ballot box with ballot 1130 | 1F5F4..1F5F9 ; Extended_Pictographic# E0.0 [6] (🗴..🗹) BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK 1131 | 1F5FA ; Extended_Pictographic# E0.7 [1] (🗺️) world map 1132 | 1F5FB..1F5FF ; Extended_Pictographic# E0.6 [5] (🗻..🗿) mount fuji..moai 1133 | 1F600 ; Extended_Pictographic# E1.0 [1] (😀) grinning face 1134 | 1F601..1F606 ; Extended_Pictographic# E0.6 [6] (😁..😆) beaming face with smiling eyes..grinning squinting face 1135 | 1F607..1F608 ; Extended_Pictographic# E1.0 [2] (😇..😈) smiling face with halo..smiling face with horns 1136 | 1F609..1F60D ; Extended_Pictographic# E0.6 [5] (😉..😍) winking face..smiling face with heart-eyes 1137 | 1F60E ; Extended_Pictographic# E1.0 [1] (😎) smiling face with sunglasses 1138 | 1F60F ; Extended_Pictographic# E0.6 [1] (😏) smirking face 1139 | 1F610 ; Extended_Pictographic# E0.7 [1] (😐) neutral face 1140 | 1F611 ; Extended_Pictographic# E1.0 [1] (😑) expressionless face 1141 | 1F612..1F614 ; Extended_Pictographic# E0.6 [3] (😒..😔) unamused face..pensive face 1142 | 1F615 ; Extended_Pictographic# E1.0 [1] (😕) confused face 1143 | 1F616 ; Extended_Pictographic# E0.6 [1] (😖) confounded face 1144 | 1F617 ; Extended_Pictographic# E1.0 [1] (😗) kissing face 1145 | 1F618 ; Extended_Pictographic# E0.6 [1] (😘) face blowing a kiss 1146 | 1F619 ; Extended_Pictographic# E1.0 [1] (😙) kissing face with smiling eyes 1147 | 1F61A ; Extended_Pictographic# E0.6 [1] (😚) kissing face with closed eyes 1148 | 1F61B ; Extended_Pictographic# E1.0 [1] (😛) face with tongue 1149 | 1F61C..1F61E ; Extended_Pictographic# E0.6 [3] (😜..😞) winking face with tongue..disappointed face 1150 | 1F61F ; Extended_Pictographic# E1.0 [1] (😟) worried face 1151 | 1F620..1F625 ; Extended_Pictographic# E0.6 [6] (😠..😥) angry face..sad but relieved face 1152 | 1F626..1F627 ; Extended_Pictographic# E1.0 [2] (😦..😧) frowning face with open mouth..anguished face 1153 | 1F628..1F62B ; Extended_Pictographic# E0.6 [4] (😨..😫) fearful face..tired face 1154 | 1F62C ; Extended_Pictographic# E1.0 [1] (😬) grimacing face 1155 | 1F62D ; Extended_Pictographic# E0.6 [1] (😭) loudly crying face 1156 | 1F62E..1F62F ; Extended_Pictographic# E1.0 [2] (😮..😯) face with open mouth..hushed face 1157 | 1F630..1F633 ; Extended_Pictographic# E0.6 [4] (😰..😳) anxious face with sweat..flushed face 1158 | 1F634 ; Extended_Pictographic# E1.0 [1] (😴) sleeping face 1159 | 1F635 ; Extended_Pictographic# E0.6 [1] (😵) face with crossed-out eyes 1160 | 1F636 ; Extended_Pictographic# E1.0 [1] (😶) face without mouth 1161 | 1F637..1F640 ; Extended_Pictographic# E0.6 [10] (😷..🙀) face with medical mask..weary cat 1162 | 1F641..1F644 ; Extended_Pictographic# E1.0 [4] (🙁..🙄) slightly frowning face..face with rolling eyes 1163 | 1F645..1F64F ; Extended_Pictographic# E0.6 [11] (🙅..🙏) person gesturing NO..folded hands 1164 | 1F680 ; Extended_Pictographic# E0.6 [1] (🚀) rocket 1165 | 1F681..1F682 ; Extended_Pictographic# E1.0 [2] (🚁..🚂) helicopter..locomotive 1166 | 1F683..1F685 ; Extended_Pictographic# E0.6 [3] (🚃..🚅) railway car..bullet train 1167 | 1F686 ; Extended_Pictographic# E1.0 [1] (🚆) train 1168 | 1F687 ; Extended_Pictographic# E0.6 [1] (🚇) metro 1169 | 1F688 ; Extended_Pictographic# E1.0 [1] (🚈) light rail 1170 | 1F689 ; Extended_Pictographic# E0.6 [1] (🚉) station 1171 | 1F68A..1F68B ; Extended_Pictographic# E1.0 [2] (🚊..🚋) tram..tram car 1172 | 1F68C ; Extended_Pictographic# E0.6 [1] (🚌) bus 1173 | 1F68D ; Extended_Pictographic# E0.7 [1] (🚍) oncoming bus 1174 | 1F68E ; Extended_Pictographic# E1.0 [1] (🚎) trolleybus 1175 | 1F68F ; Extended_Pictographic# E0.6 [1] (🚏) bus stop 1176 | 1F690 ; Extended_Pictographic# E1.0 [1] (🚐) minibus 1177 | 1F691..1F693 ; Extended_Pictographic# E0.6 [3] (🚑..🚓) ambulance..police car 1178 | 1F694 ; Extended_Pictographic# E0.7 [1] (🚔) oncoming police car 1179 | 1F695 ; Extended_Pictographic# E0.6 [1] (🚕) taxi 1180 | 1F696 ; Extended_Pictographic# E1.0 [1] (🚖) oncoming taxi 1181 | 1F697 ; Extended_Pictographic# E0.6 [1] (🚗) automobile 1182 | 1F698 ; Extended_Pictographic# E0.7 [1] (🚘) oncoming automobile 1183 | 1F699..1F69A ; Extended_Pictographic# E0.6 [2] (🚙..🚚) sport utility vehicle..delivery truck 1184 | 1F69B..1F6A1 ; Extended_Pictographic# E1.0 [7] (🚛..🚡) articulated lorry..aerial tramway 1185 | 1F6A2 ; Extended_Pictographic# E0.6 [1] (🚢) ship 1186 | 1F6A3 ; Extended_Pictographic# E1.0 [1] (🚣) person rowing boat 1187 | 1F6A4..1F6A5 ; Extended_Pictographic# E0.6 [2] (🚤..🚥) speedboat..horizontal traffic light 1188 | 1F6A6 ; Extended_Pictographic# E1.0 [1] (🚦) vertical traffic light 1189 | 1F6A7..1F6AD ; Extended_Pictographic# E0.6 [7] (🚧..🚭) construction..no smoking 1190 | 1F6AE..1F6B1 ; Extended_Pictographic# E1.0 [4] (🚮..🚱) litter in bin sign..non-potable water 1191 | 1F6B2 ; Extended_Pictographic# E0.6 [1] (🚲) bicycle 1192 | 1F6B3..1F6B5 ; Extended_Pictographic# E1.0 [3] (🚳..🚵) no bicycles..person mountain biking 1193 | 1F6B6 ; Extended_Pictographic# E0.6 [1] (🚶) person walking 1194 | 1F6B7..1F6B8 ; Extended_Pictographic# E1.0 [2] (🚷..🚸) no pedestrians..children crossing 1195 | 1F6B9..1F6BE ; Extended_Pictographic# E0.6 [6] (🚹..🚾) men’s room..water closet 1196 | 1F6BF ; Extended_Pictographic# E1.0 [1] (🚿) shower 1197 | 1F6C0 ; Extended_Pictographic# E0.6 [1] (🛀) person taking bath 1198 | 1F6C1..1F6C5 ; Extended_Pictographic# E1.0 [5] (🛁..🛅) bathtub..left luggage 1199 | 1F6C6..1F6CA ; Extended_Pictographic# E0.0 [5] (🛆..🛊) TRIANGLE WITH ROUNDED CORNERS..GIRLS SYMBOL 1200 | 1F6CB ; Extended_Pictographic# E0.7 [1] (🛋️) couch and lamp 1201 | 1F6CC ; Extended_Pictographic# E1.0 [1] (🛌) person in bed 1202 | 1F6CD..1F6CF ; Extended_Pictographic# E0.7 [3] (🛍️..🛏️) shopping bags..bed 1203 | 1F6D0 ; Extended_Pictographic# E1.0 [1] (🛐) place of worship 1204 | 1F6D1..1F6D2 ; Extended_Pictographic# E3.0 [2] (🛑..🛒) stop sign..shopping cart 1205 | 1F6D3..1F6D4 ; Extended_Pictographic# E0.0 [2] (🛓..🛔) STUPA..PAGODA 1206 | 1F6D5 ; Extended_Pictographic# E12.0 [1] (🛕) hindu temple 1207 | 1F6D6..1F6D7 ; Extended_Pictographic# E13.0 [2] (🛖..🛗) hut..elevator 1208 | 1F6D8..1F6DB ; Extended_Pictographic# E0.0 [4] (🛘..🛛) .. 1209 | 1F6DC ; Extended_Pictographic# E15.0 [1] (🛜) wireless 1210 | 1F6DD..1F6DF ; Extended_Pictographic# E14.0 [3] (🛝..🛟) playground slide..ring buoy 1211 | 1F6E0..1F6E5 ; Extended_Pictographic# E0.7 [6] (🛠️..🛥️) hammer and wrench..motor boat 1212 | 1F6E6..1F6E8 ; Extended_Pictographic# E0.0 [3] (🛦..🛨) UP-POINTING MILITARY AIRPLANE..UP-POINTING SMALL AIRPLANE 1213 | 1F6E9 ; Extended_Pictographic# E0.7 [1] (🛩️) small airplane 1214 | 1F6EA ; Extended_Pictographic# E0.0 [1] (🛪) NORTHEAST-POINTING AIRPLANE 1215 | 1F6EB..1F6EC ; Extended_Pictographic# E1.0 [2] (🛫..🛬) airplane departure..airplane arrival 1216 | 1F6ED..1F6EF ; Extended_Pictographic# E0.0 [3] (🛭..🛯) .. 1217 | 1F6F0 ; Extended_Pictographic# E0.7 [1] (🛰️) satellite 1218 | 1F6F1..1F6F2 ; Extended_Pictographic# E0.0 [2] (🛱..🛲) ONCOMING FIRE ENGINE..DIESEL LOCOMOTIVE 1219 | 1F6F3 ; Extended_Pictographic# E0.7 [1] (🛳️) passenger ship 1220 | 1F6F4..1F6F6 ; Extended_Pictographic# E3.0 [3] (🛴..🛶) kick scooter..canoe 1221 | 1F6F7..1F6F8 ; Extended_Pictographic# E5.0 [2] (🛷..🛸) sled..flying saucer 1222 | 1F6F9 ; Extended_Pictographic# E11.0 [1] (🛹) skateboard 1223 | 1F6FA ; Extended_Pictographic# E12.0 [1] (🛺) auto rickshaw 1224 | 1F6FB..1F6FC ; Extended_Pictographic# E13.0 [2] (🛻..🛼) pickup truck..roller skate 1225 | 1F6FD..1F6FF ; Extended_Pictographic# E0.0 [3] (🛽..🛿) .. 1226 | 1F774..1F77F ; Extended_Pictographic# E0.0 [12] (🝴..🝿) LOT OF FORTUNE..ORCUS 1227 | 1F7D5..1F7DF ; Extended_Pictographic# E0.0 [11] (🟕..🟟) CIRCLED TRIANGLE.. 1228 | 1F7E0..1F7EB ; Extended_Pictographic# E12.0 [12] (🟠..🟫) orange circle..brown square 1229 | 1F7EC..1F7EF ; Extended_Pictographic# E0.0 [4] (🟬..🟯) .. 1230 | 1F7F0 ; Extended_Pictographic# E14.0 [1] (🟰) heavy equals sign 1231 | 1F7F1..1F7FF ; Extended_Pictographic# E0.0 [15] (🟱..🟿) .. 1232 | 1F80C..1F80F ; Extended_Pictographic# E0.0 [4] (🠌..🠏) .. 1233 | 1F848..1F84F ; Extended_Pictographic# E0.0 [8] (🡈..🡏) .. 1234 | 1F85A..1F85F ; Extended_Pictographic# E0.0 [6] (🡚..🡟) .. 1235 | 1F888..1F88F ; Extended_Pictographic# E0.0 [8] (🢈..🢏) .. 1236 | 1F8AE..1F8FF ; Extended_Pictographic# E0.0 [82] (🢮..🣿) .. 1237 | 1F90C ; Extended_Pictographic# E13.0 [1] (🤌) pinched fingers 1238 | 1F90D..1F90F ; Extended_Pictographic# E12.0 [3] (🤍..🤏) white heart..pinching hand 1239 | 1F910..1F918 ; Extended_Pictographic# E1.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns 1240 | 1F919..1F91E ; Extended_Pictographic# E3.0 [6] (🤙..🤞) call me hand..crossed fingers 1241 | 1F91F ; Extended_Pictographic# E5.0 [1] (🤟) love-you gesture 1242 | 1F920..1F927 ; Extended_Pictographic# E3.0 [8] (🤠..🤧) cowboy hat face..sneezing face 1243 | 1F928..1F92F ; Extended_Pictographic# E5.0 [8] (🤨..🤯) face with raised eyebrow..exploding head 1244 | 1F930 ; Extended_Pictographic# E3.0 [1] (🤰) pregnant woman 1245 | 1F931..1F932 ; Extended_Pictographic# E5.0 [2] (🤱..🤲) breast-feeding..palms up together 1246 | 1F933..1F93A ; Extended_Pictographic# E3.0 [8] (🤳..🤺) selfie..person fencing 1247 | 1F93C..1F93E ; Extended_Pictographic# E3.0 [3] (🤼..🤾) people wrestling..person playing handball 1248 | 1F93F ; Extended_Pictographic# E12.0 [1] (🤿) diving mask 1249 | 1F940..1F945 ; Extended_Pictographic# E3.0 [6] (🥀..🥅) wilted flower..goal net 1250 | 1F947..1F94B ; Extended_Pictographic# E3.0 [5] (🥇..🥋) 1st place medal..martial arts uniform 1251 | 1F94C ; Extended_Pictographic# E5.0 [1] (🥌) curling stone 1252 | 1F94D..1F94F ; Extended_Pictographic# E11.0 [3] (🥍..🥏) lacrosse..flying disc 1253 | 1F950..1F95E ; Extended_Pictographic# E3.0 [15] (🥐..🥞) croissant..pancakes 1254 | 1F95F..1F96B ; Extended_Pictographic# E5.0 [13] (🥟..🥫) dumpling..canned food 1255 | 1F96C..1F970 ; Extended_Pictographic# E11.0 [5] (🥬..🥰) leafy green..smiling face with hearts 1256 | 1F971 ; Extended_Pictographic# E12.0 [1] (🥱) yawning face 1257 | 1F972 ; Extended_Pictographic# E13.0 [1] (🥲) smiling face with tear 1258 | 1F973..1F976 ; Extended_Pictographic# E11.0 [4] (🥳..🥶) partying face..cold face 1259 | 1F977..1F978 ; Extended_Pictographic# E13.0 [2] (🥷..🥸) ninja..disguised face 1260 | 1F979 ; Extended_Pictographic# E14.0 [1] (🥹) face holding back tears 1261 | 1F97A ; Extended_Pictographic# E11.0 [1] (🥺) pleading face 1262 | 1F97B ; Extended_Pictographic# E12.0 [1] (🥻) sari 1263 | 1F97C..1F97F ; Extended_Pictographic# E11.0 [4] (🥼..🥿) lab coat..flat shoe 1264 | 1F980..1F984 ; Extended_Pictographic# E1.0 [5] (🦀..🦄) crab..unicorn 1265 | 1F985..1F991 ; Extended_Pictographic# E3.0 [13] (🦅..🦑) eagle..squid 1266 | 1F992..1F997 ; Extended_Pictographic# E5.0 [6] (🦒..🦗) giraffe..cricket 1267 | 1F998..1F9A2 ; Extended_Pictographic# E11.0 [11] (🦘..🦢) kangaroo..swan 1268 | 1F9A3..1F9A4 ; Extended_Pictographic# E13.0 [2] (🦣..🦤) mammoth..dodo 1269 | 1F9A5..1F9AA ; Extended_Pictographic# E12.0 [6] (🦥..🦪) sloth..oyster 1270 | 1F9AB..1F9AD ; Extended_Pictographic# E13.0 [3] (🦫..🦭) beaver..seal 1271 | 1F9AE..1F9AF ; Extended_Pictographic# E12.0 [2] (🦮..🦯) guide dog..white cane 1272 | 1F9B0..1F9B9 ; Extended_Pictographic# E11.0 [10] (🦰..🦹) red hair..supervillain 1273 | 1F9BA..1F9BF ; Extended_Pictographic# E12.0 [6] (🦺..🦿) safety vest..mechanical leg 1274 | 1F9C0 ; Extended_Pictographic# E1.0 [1] (🧀) cheese wedge 1275 | 1F9C1..1F9C2 ; Extended_Pictographic# E11.0 [2] (🧁..🧂) cupcake..salt 1276 | 1F9C3..1F9CA ; Extended_Pictographic# E12.0 [8] (🧃..🧊) beverage box..ice 1277 | 1F9CB ; Extended_Pictographic# E13.0 [1] (🧋) bubble tea 1278 | 1F9CC ; Extended_Pictographic# E14.0 [1] (🧌) troll 1279 | 1F9CD..1F9CF ; Extended_Pictographic# E12.0 [3] (🧍..🧏) person standing..deaf person 1280 | 1F9D0..1F9E6 ; Extended_Pictographic# E5.0 [23] (🧐..🧦) face with monocle..socks 1281 | 1F9E7..1F9FF ; Extended_Pictographic# E11.0 [25] (🧧..🧿) red envelope..nazar amulet 1282 | 1FA00..1FA6F ; Extended_Pictographic# E0.0 [112] (🨀..🩯) NEUTRAL CHESS KING.. 1283 | 1FA70..1FA73 ; Extended_Pictographic# E12.0 [4] (🩰..🩳) ballet shoes..shorts 1284 | 1FA74 ; Extended_Pictographic# E13.0 [1] (🩴) thong sandal 1285 | 1FA75..1FA77 ; Extended_Pictographic# E15.0 [3] (🩵..🩷) light blue heart..pink heart 1286 | 1FA78..1FA7A ; Extended_Pictographic# E12.0 [3] (🩸..🩺) drop of blood..stethoscope 1287 | 1FA7B..1FA7C ; Extended_Pictographic# E14.0 [2] (🩻..🩼) x-ray..crutch 1288 | 1FA7D..1FA7F ; Extended_Pictographic# E0.0 [3] (🩽..🩿) .. 1289 | 1FA80..1FA82 ; Extended_Pictographic# E12.0 [3] (🪀..🪂) yo-yo..parachute 1290 | 1FA83..1FA86 ; Extended_Pictographic# E13.0 [4] (🪃..🪆) boomerang..nesting dolls 1291 | 1FA87..1FA88 ; Extended_Pictographic# E15.0 [2] (🪇..🪈) maracas..flute 1292 | 1FA89..1FA8F ; Extended_Pictographic# E0.0 [7] (🪉..🪏) .. 1293 | 1FA90..1FA95 ; Extended_Pictographic# E12.0 [6] (🪐..🪕) ringed planet..banjo 1294 | 1FA96..1FAA8 ; Extended_Pictographic# E13.0 [19] (🪖..🪨) military helmet..rock 1295 | 1FAA9..1FAAC ; Extended_Pictographic# E14.0 [4] (🪩..🪬) mirror ball..hamsa 1296 | 1FAAD..1FAAF ; Extended_Pictographic# E15.0 [3] (🪭..🪯) folding hand fan..khanda 1297 | 1FAB0..1FAB6 ; Extended_Pictographic# E13.0 [7] (🪰..🪶) fly..feather 1298 | 1FAB7..1FABA ; Extended_Pictographic# E14.0 [4] (🪷..🪺) lotus..nest with eggs 1299 | 1FABB..1FABD ; Extended_Pictographic# E15.0 [3] (🪻..🪽) hyacinth..wing 1300 | 1FABE ; Extended_Pictographic# E0.0 [1] (🪾) 1301 | 1FABF ; Extended_Pictographic# E15.0 [1] (🪿) goose 1302 | 1FAC0..1FAC2 ; Extended_Pictographic# E13.0 [3] (🫀..🫂) anatomical heart..people hugging 1303 | 1FAC3..1FAC5 ; Extended_Pictographic# E14.0 [3] (🫃..🫅) pregnant man..person with crown 1304 | 1FAC6..1FACD ; Extended_Pictographic# E0.0 [8] (🫆..🫍) .. 1305 | 1FACE..1FACF ; Extended_Pictographic# E15.0 [2] (🫎..🫏) moose..donkey 1306 | 1FAD0..1FAD6 ; Extended_Pictographic# E13.0 [7] (🫐..🫖) blueberries..teapot 1307 | 1FAD7..1FAD9 ; Extended_Pictographic# E14.0 [3] (🫗..🫙) pouring liquid..jar 1308 | 1FADA..1FADB ; Extended_Pictographic# E15.0 [2] (🫚..🫛) ginger root..pea pod 1309 | 1FADC..1FADF ; Extended_Pictographic# E0.0 [4] (🫜..🫟) .. 1310 | 1FAE0..1FAE7 ; Extended_Pictographic# E14.0 [8] (🫠..🫧) melting face..bubbles 1311 | 1FAE8 ; Extended_Pictographic# E15.0 [1] (🫨) shaking face 1312 | 1FAE9..1FAEF ; Extended_Pictographic# E0.0 [7] (🫩..🫯) .. 1313 | 1FAF0..1FAF6 ; Extended_Pictographic# E14.0 [7] (🫰..🫶) hand with index finger and thumb crossed..heart hands 1314 | 1FAF7..1FAF8 ; Extended_Pictographic# E15.0 [2] (🫷..🫸) leftwards pushing hand..rightwards pushing hand 1315 | 1FAF9..1FAFF ; Extended_Pictographic# E0.0 [7] (🫹..🫿) .. 1316 | 1FC00..1FFFD ; Extended_Pictographic# E0.0[1022] (🰀..🿽) .. 1317 | 1318 | # Total elements: 3537 1319 | 1320 | #EOF 1321 | -------------------------------------------------------------------------------- /scripts/emoji.txt: -------------------------------------------------------------------------------- 1 | 'o/' => '👋', 2 | ' '💔', 3 | '<3' => '💗', 4 | '8-D' => '😁', 5 | '8D' => '😁', 6 | ':-D' => '😁', 7 | '=-3' => '😁', 8 | '=-D' => '😁', 9 | '=3' => '😁', 10 | '=D' => '😁', 11 | 'B^D' => '😁', 12 | 'X-D' => '😁', 13 | 'XD' => '😁', 14 | 'x-D' => '😁', 15 | 'xD' => '😁', 16 | ':\')' => '😂', 17 | ':\'-)' => '😂', 18 | ':-))' => '😃', 19 | '8)' => '😄', 20 | ':)' => '😄', 21 | ':-)' => '😄', 22 | ':3' => '😄', 23 | ':D' => '😄', 24 | ':]' => '😄', 25 | ':^)' => '😄', 26 | ':c)' => '😄', 27 | ':o)' => '😄', 28 | ':}' => '😄', 29 | ':っ)' => '😄', 30 | '=)' => '😄', 31 | '=]' => '😄', 32 | '0:)' => '😇', 33 | '0:-)' => '😇', 34 | '0:-3' => '😇', 35 | '0:3' => '😇', 36 | '0;^)' => '😇', 37 | 'O:-)' => '😇', 38 | '3:)' => '😈', 39 | '3:-)' => '😈', 40 | '}:)' => '😈', 41 | '}:-)' => '😈', 42 | '*)' => '😉', 43 | '*-)' => '😉', 44 | ':-,' => '😉', 45 | ';)' => '😉', 46 | ';-)' => '😉', 47 | ';-]' => '😉', 48 | ';D' => '😉', 49 | ';]' => '😉', 50 | ';^)' => '😉', 51 | ':-|' => '😐', 52 | ':|' => '😐', 53 | ':(' => '😒', 54 | ':-(' => '😒', 55 | ':-<' => '😒', 56 | ':-[' => '😒', 57 | ':-c' => '😒', 58 | ':<' => '😒', 59 | ':[' => '😒', 60 | ':c' => '😒', 61 | ':{' => '😒', 62 | ':っC' => '😒', 63 | '%)' => '😖', 64 | '%-)' => '😖', 65 | ':-P' => '😜', 66 | ':-b' => '😜', 67 | ':-p' => '😜', 68 | ':-Þ' => '😜', 69 | ':-þ' => '😜', 70 | ':P' => '😜', 71 | ':b' => '😜', 72 | ':p' => '😜', 73 | ':Þ' => '😜', 74 | ':þ' => '😜', 75 | ';(' => '😜', 76 | '=p' => '😜', 77 | 'X-P' => '😜', 78 | 'XP' => '😜', 79 | 'd:' => '😜', 80 | 'x-p' => '😜', 81 | 'xp' => '😜', 82 | ':-||' => '😠', 83 | ':@' => '😠', 84 | ':-.' => '😡', 85 | ':-/' => '😡', 86 | ':/' => '😡', 87 | ':L' => '😡', 88 | ':S' => '😡', 89 | ':\\' => '😡', 90 | '=/' => '😡', 91 | '=L' => '😡', 92 | '=\\' => '😡', 93 | ':\'(' => '😢', 94 | ':\'-(' => '😢', 95 | '^5' => '😤', 96 | '^<_<' => '😤', 97 | 'o/\\o' => '😤', 98 | '|-O' => '😫', 99 | '|;-)' => '😫', 100 | ':###..' => '😰', 101 | ':-###..' => '😰', 102 | 'D-\':' => '😱', 103 | 'D8' => '😱', 104 | 'D:' => '😱', 105 | 'D:<' => '😱', 106 | 'D;' => '😱', 107 | 'D=' => '😱', 108 | 'DX' => '😱', 109 | 'v.v' => '😱', 110 | '8-0' => '😲', 111 | ':-O' => '😲', 112 | ':-o' => '😲', 113 | ':O' => '😲', 114 | ':o' => '😲', 115 | 'O-O' => '😲', 116 | 'O_O' => '😲', 117 | 'O_o' => '😲', 118 | 'o-o' => '😲', 119 | 'o_O' => '😲', 120 | 'o_o' => '😲', 121 | ':$' => '😳', 122 | '#-)' => '😵', 123 | ':#' => '😶', 124 | ':&' => '😶', 125 | ':-#' => '😶', 126 | ':-&' => '😶', 127 | ':-X' => '😶', 128 | ':X' => '😶', 129 | ':-J' => '😼', 130 | ':*' => '😽', 131 | ':^*' => '😽', 132 | 'ಠ_ಠ' => '🙅', 133 | '*\\0/*' => '🙆', 134 | '\\o/' => '🙆', 135 | ':>' => '😄', 136 | '>.<' => '😡', 137 | '>:(' => '😠', 138 | '>:)' => '😈', 139 | '>:-)' => '😈', 140 | '>:/' => '😡', 141 | '>:O' => '😲', 142 | '>:P' => '😜', 143 | '>:[' => '😒', 144 | '>:\\' => '😡', 145 | '>;)' => '😈', 146 | '>_>^' => '😤', 147 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! The `deunicode` library transliterates Unicode strings such as "Æneid" into pure 2 | //! ASCII ones such as "AEneid." 3 | //! 4 | //! Supports no-std. Stores Unicode data in a compact format. 5 | //! 6 | //! It started as a Rust port of [`Text::Unidecode`](http://search.cpan.org/~sburke/Text-Unidecode-1.30/lib/Text/Unidecode.pm) Perl module, and was extended to support emoji. 7 | //! 8 | //! See [README](https://github.com/kornelski/deunicode/blob/master/README.md) for more info. 9 | //! 10 | //! Examples 11 | //! -------- 12 | #![cfg_attr(feature = "alloc", doc = "```rust")] 13 | #![cfg_attr(not(feature = "alloc"), doc = "```rust,ignore")] 14 | //! use deunicode::deunicode; 15 | //! 16 | //! assert_eq!(deunicode("Æneid"), "AEneid"); 17 | //! assert_eq!(deunicode("étude"), "etude"); 18 | //! assert_eq!(deunicode("北亰"), "Bei Jing"); 19 | //! assert_eq!(deunicode("ᔕᓇᓇ"), "shanana"); 20 | //! assert_eq!(deunicode("げんまい茶"), "genmaiCha"); 21 | //! assert_eq!(deunicode("🦄☣"), "unicorn biohazard"); 22 | //! assert_eq!(deunicode("…"), "..."); 23 | //! 24 | //! // format without a temporary string 25 | //! use deunicode::AsciiChars; 26 | //! format!("what's up {}", "🐶".ascii_chars()); 27 | #![doc = "```"] // to mollify some syntax highlighters 28 | 29 | #![no_std] 30 | 31 | #[cfg(any(test, feature = "alloc"))] 32 | extern crate alloc; 33 | #[cfg(feature = "alloc")] 34 | use alloc::borrow::Cow; 35 | #[cfg(feature = "alloc")] 36 | use alloc::string::String; 37 | 38 | use core::iter::FusedIterator; 39 | use core::str::Chars; 40 | 41 | const MAPPING: &str = include_str!("mapping.txt"); 42 | 43 | #[repr(C)] 44 | #[derive(Copy, Clone)] 45 | struct Ptr { 46 | /// if len <= 2, it's the string itself, 47 | /// otherwise it's an u16 offset into MAPPING 48 | chr: [u8; 2], 49 | len: u8, 50 | } 51 | 52 | const POINTERS_BYTES: &[u8] = include_bytes!("pointers.bin"); 53 | /// POINTERS format is described by struct Ptr 54 | const POINTERS: &[Ptr] = unsafe { core::slice::from_raw_parts(POINTERS_BYTES.as_ptr().cast(), POINTERS_BYTES.len() / core::mem::size_of::()) }; 55 | 56 | /// This function takes any Unicode string and returns an ASCII transliteration 57 | /// of that string. 58 | /// 59 | /// Guarantees and Warnings 60 | /// ----------------------- 61 | /// Here are some guarantees you have when calling [`deunicode()`]: 62 | /// * The `String` returned will be valid ASCII; the decimal representation of 63 | /// every `char` in the string will be between 0 and 127, inclusive. 64 | /// * Every ASCII character (0x0000 - 0x007F) is mapped to itself. 65 | /// * All Unicode characters will translate to a string containing newlines 66 | /// (`"\n"`) or ASCII characters in the range 0x0020 - 0x007E. So for example, 67 | /// no Unicode character will translate to `\u{01}`. The exception is if the 68 | /// ASCII character itself is passed in, in which case it will be mapped to 69 | /// itself. (So `'\u{01}'` will be mapped to `"\u{01}"`.) 70 | /// 71 | /// There are, however, some things you should keep in mind: 72 | /// * As stated, some transliterations do produce `\n` characters. 73 | /// * Some Unicode characters transliterate to an empty string on purpose. 74 | /// * Some Unicode characters are unknown and transliterate to `"[?]"` (see [`deunicode_with_tofu()`]) 75 | /// * Many Unicode characters transliterate to multi-character strings. For 76 | /// example, 北 is transliterated as "Bei ". 77 | /// * Han characters are mapped to Mandarin, and will be mostly illegible to Japanese readers. 78 | #[inline(always)] 79 | #[cfg(feature = "alloc")] 80 | #[must_use] 81 | pub fn deunicode(s: &str) -> String { 82 | deunicode_with_tofu(s, "[?]") 83 | } 84 | 85 | /// Same as [`deunicode()`], but unknown characters can be replaced with a custom string. 86 | /// 87 | /// You can use "\u{FFFD}" to use the usual Unicode Replacement Character. 88 | /// 89 | /// "Tofu" is a nickname for a replacement character, which in Unicode fonts usually 90 | /// looks like a block of tofu. 91 | #[inline] 92 | #[cfg(feature = "alloc")] 93 | #[must_use] 94 | pub fn deunicode_with_tofu(s: &str, custom_placeholder: &str) -> String { 95 | deunicode_with_tofu_cow(s, custom_placeholder).into_owned() 96 | } 97 | 98 | /// Same as [`deunicode_with_tofu()`], but avoids allocating a new `String` if not necessary. 99 | /// 100 | /// You can use "\u{FFFD}" to use the usual Unicode Replacement Character. 101 | /// 102 | /// "Tofu" is a nickname for a replacement character, which in Unicode fonts usually 103 | /// looks like a block of tofu. 104 | #[cfg(feature = "alloc")] 105 | #[must_use] 106 | pub fn deunicode_with_tofu_cow<'input>(s: &'input str, custom_placeholder: &str) -> Cow<'input, str> { 107 | // Fast path to skip over ASCII chars at the beginning of the string 108 | let ascii_len = s.as_bytes().iter().take_while(|&&c| c < 0x7F).count(); 109 | if ascii_len >= s.len() { // >= elides bounds check in split_at 110 | return Cow::Borrowed(s); 111 | } 112 | 113 | let (ascii, rest) = s.as_bytes().split_at(ascii_len); 114 | // safe, because it's been checked to be ASCII only 115 | debug_assert!(core::str::from_utf8(ascii).is_ok()); 116 | let ascii = unsafe { core::str::from_utf8_unchecked(ascii) }; 117 | 118 | // reserve a bit more space to avoid reallocations on longer transliterations 119 | // but instead of `+ 16` uses `| 15` to stay in the smallest allocation bucket for short strings 120 | let mut out = String::new(); 121 | // this generates less code than with_capacity() 122 | out.try_reserve_exact(s.len() | 15).unwrap_or_else(|_| panic!()); 123 | 124 | // this if optimizes out unused realloc code from push_str 125 | let needs_to_grow = ascii.as_bytes().len() > out.capacity().wrapping_sub(out.len()); 126 | if !needs_to_grow { 127 | out.push_str(ascii); 128 | } 129 | 130 | // safe, because UTF-8 codepoint can't start with < 7F byte 131 | debug_assert!(core::str::from_utf8(rest).is_ok()); 132 | let s = unsafe { core::str::from_utf8_unchecked(rest) }; 133 | 134 | out.extend(s.ascii_chars().map(move |ch| ch.unwrap_or(custom_placeholder))); 135 | Cow::Owned(out) 136 | } 137 | 138 | /// This function takes a single Unicode character and returns an ASCII 139 | /// transliteration. 140 | /// 141 | /// The warnings and guarantees of [`deunicode()`] apply to this function as well. 142 | /// 143 | /// Examples 144 | /// -------- 145 | /// ```rust 146 | /// # use deunicode::deunicode_char; 147 | /// assert_eq!(deunicode_char('Æ'), Some("AE")); 148 | /// assert_eq!(deunicode_char('北'), Some("Bei ")); 149 | /// ``` 150 | #[inline] 151 | #[must_use] 152 | pub fn deunicode_char(ch: char) -> Option<&'static str> { 153 | if let Some(p) = POINTERS.get(ch as usize) { 154 | // if length is 1 or 2, then the "pointer" data is used to store the char 155 | if p.len <= 2 { 156 | let chars = p.chr.get(..p.len as usize)?; 157 | // safe, because we're returning only ASCII 158 | debug_assert!(core::str::from_utf8(chars).is_ok()); 159 | unsafe { 160 | Some(core::str::from_utf8_unchecked(chars)) 161 | } 162 | } else { 163 | let map_pos = (u16::from(p.chr[0]) | u16::from(p.chr[1]) << 8) as usize; 164 | // unknown characters are intentionally mapped to out of range length 165 | MAPPING.get(map_pos..map_pos + p.len as usize) 166 | } 167 | } else { 168 | None 169 | } 170 | } 171 | 172 | /// Convenience functions for deunicode. `use deunicode::AsciiChars` 173 | pub trait AsciiChars { 174 | /// Iterate over Unicode characters converted to ASCII sequences. 175 | /// 176 | /// Items of this iterator may be `None` for some characters. 177 | /// Use `.map(|ch| ch.unwrap_or("?"))` to replace invalid characters. 178 | /// 179 | /// Alternatively, this iterator can be used in formatters: 180 | #[cfg_attr(feature = "alloc", doc = "```rust")] 181 | #[cfg_attr(not(feature = "alloc"), doc = "```rust,ignore")] 182 | /// use deunicode::AsciiChars; 183 | /// format!("what's up {}", "🐶".ascii_chars()); 184 | #[doc = "```"] 185 | fn ascii_chars(&self) -> AsciiCharsIter<'_>; 186 | 187 | /// Convert any Unicode string to ASCII-only string. 188 | /// 189 | /// Characters are converted to closest ASCII equivalent. 190 | /// Characters that can't be converted are replaced with `"[?]"`. 191 | #[cfg(feature = "alloc")] 192 | fn to_ascii_lossy(&self) -> String; 193 | } 194 | 195 | #[cfg(feature = "alloc")] 196 | impl AsciiChars for String { 197 | #[inline(always)] 198 | fn ascii_chars(&self) -> AsciiCharsIter<'_> { 199 | AsciiCharsIter::new(self) 200 | } 201 | #[inline(always)] 202 | fn to_ascii_lossy(&self) -> String { 203 | deunicode(self) 204 | } 205 | } 206 | 207 | impl AsciiChars for str { 208 | #[inline(always)] 209 | fn ascii_chars(&self) -> AsciiCharsIter<'_> { 210 | AsciiCharsIter::new(self) 211 | } 212 | #[inline(always)] 213 | #[cfg(feature = "alloc")] 214 | fn to_ascii_lossy(&self) -> String { 215 | deunicode(self) 216 | } 217 | } 218 | 219 | /// Iterator that translates Unicode characters to ASCII strings. 220 | /// 221 | /// See [`AsciiChars`] trait's `str.ascii_chars()` method. 222 | /// 223 | /// Additionally, it implements `Display` for formatting strings without allocations. 224 | /// 225 | #[cfg_attr(feature = "alloc", doc = "```rust")] 226 | #[cfg_attr(not(feature = "alloc"), doc = "```rust,ignore")] 227 | /// use deunicode::AsciiChars; 228 | /// format!("what's up {}", "🐶".ascii_chars()); 229 | #[doc = "```"] 230 | #[derive(Clone)] 231 | pub struct AsciiCharsIter<'a> { 232 | next_char: Option>, 233 | chars: Chars<'a>, 234 | } 235 | 236 | /// Use `.map(|ch| ch.unwrap_or("?"))` to replace invalid characters. 237 | impl<'a> AsciiCharsIter<'a> { 238 | #[inline] 239 | pub fn new(unicode_string: &'a str) -> Self { 240 | let mut chars = unicode_string.chars(); 241 | Self { 242 | next_char: chars.next().map(deunicode_char), 243 | chars, 244 | } 245 | } 246 | } 247 | 248 | impl<'a> FusedIterator for AsciiCharsIter<'a> {} 249 | 250 | impl<'a> Iterator for AsciiCharsIter<'a> { 251 | type Item = Option<&'static str>; 252 | 253 | #[inline] 254 | fn next(&mut self) -> Option { 255 | let dch = self.next_char?; 256 | self.next_char = self.chars.next().map(deunicode_char); 257 | let dch = match dch { 258 | None => return Some(None), 259 | Some(dch) => dch, 260 | }; 261 | // ends with space 262 | let trim_last_char = dch.as_bytes().len() > 1 && dch.as_bytes().last().copied() == Some(b' ') && 263 | self.next_char.map_or(true, |ch| { // true if end 264 | ch.map_or(false, |ch| ch.as_bytes().first().copied() == Some(b' ')) // space next (assume placeholder is not space) 265 | }); 266 | Some(if !trim_last_char { 267 | Some(dch) 268 | } else { 269 | dch.get(..dch.len()-1) 270 | }) 271 | } 272 | 273 | #[inline] 274 | fn count(self) -> usize { 275 | self.chars.count() + if self.next_char.is_some() {1} else {0} 276 | } 277 | 278 | #[inline] 279 | fn size_hint(&self) -> (usize, Option) { 280 | (self.chars.size_hint().0 + if self.next_char.is_some() {1} else {0}, None) 281 | } 282 | } 283 | 284 | /// Format without a temporary string 285 | /// 286 | #[cfg_attr(feature = "alloc", doc = "```rust")] 287 | #[cfg_attr(not(feature = "alloc"), doc = "```rust,ignore")] 288 | /// use deunicode::AsciiChars; 289 | /// format!("what's up {}", "🐶".ascii_chars()); 290 | #[doc = "```"] 291 | impl core::fmt::Display for AsciiCharsIter<'_> { 292 | fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { 293 | self.clone().try_for_each(|ch| f.write_str(ch.unwrap_or("\u{FFFD}"))) 294 | } 295 | } 296 | 297 | #[test] 298 | fn iter_test() { 299 | use alloc::vec::Vec; 300 | let chars: Vec<_> = AsciiCharsIter::new("🄏中国").flatten().collect(); 301 | assert_eq!(&chars, &["NonCommercial", "Zhong ", "Guo"]); 302 | let chars: Vec<_> = "中国x🅶".ascii_chars().flatten().collect(); 303 | assert_eq!(&chars, &["Zhong ", "Guo ", "x", "G"]); 304 | let chars: Vec<_> = "☃中 国".ascii_chars().flatten().collect(); 305 | assert_eq!(&chars, &["snowman ", "Zhong", " ", "Guo"]); 306 | } 307 | 308 | #[test] 309 | fn zalgo() { 310 | assert_eq!(deunicode_with_tofu("h̵̡̢̛̻̬͔̦͓̥̞̳͇̭̣̪̰̞̲̩̭̤͚͖͓̰̭̝̬̖̭͇͇̰͇͓̠͑͆͐͛̏͒͆̊́̊̂̉̉̈́̿̆̾̌̀͒͌́͗͋͜͝͝͝ͅĕ̷̡̧̡̧̜̮͙̗͙͕͖̩͈͙̞̞̭͙̯͖̰͖̙̹͖͚̦̬̄̀̓̈́͗̆̓̽͛̀͛̄͂̉͒̓̐̃̑́͊̀͋͊͗́̈́͑͗̐̔̈͊͋̓͊̓́̏̍̍̓͘̕͝͝͠ͅl̶̠̮̺̦̩͓̣̪͚͌̊̈́̀̄̈́̉͗̀̏͋̆̈̈́̉̋̊̉̉̌̈́̚̕͠͠l̴̨̡͍͇̝̟̩̙̤̰̬̬͖͙̺̟̯͓̥̯͔̤̠̻̤̮̘̋͑̑̿͗͂̃̓̓̉͒̑͜͠ͅo̸̢̧̨̜͉̜͓͙̰̳̙̖̰͇̺͈̝̬̩̫͛̅̍͌̎̅̿̂̚̕͜ ̵̛̗͍̊̈͋̀̊͒̄̔̔͋͋̆͋̅̀͂͂̍́̀̈́̈́͂̂̂̆̅͗̄̈́̀̈́̅̒̈̋͊̍̈́͂̑̓̽̂̂̓̚̕̚̕̚͠͝w̷̨͍͖̗͔͖͎̩̠̜͖̞͍̘̤͕̮̥̭͛̆̎̋̄͒̓̈́͆̀̆̚ǫ̷̢̢̧̧̨̧̧̨̢̼̮̺̬͇͓̪̯͖̥͙̠͍̭̩̰͎̘̺̝̲̖̮̞̝̠̠͎̻̠͙̫͙̞̫̭͖̱͉̱̮̌͑̈̅̈́̊̓͌̇͌̏̾̆͗̉͊̐̈́̾́̔̆͐́͘͜͜͝ͅŗ̵̡̛̛̟̭͉̰̮̺̜̼̰̟̲͖͔͕̰͕͇̪̲̫̬͚̱̮͎̭̩̩̉̇̉̀̉͑̔͋͆͌͜͠ļ̴̢̨̢̛͙̳̮̠͔͇͈̟͇̦̯͖̖͚̺̤͈̻͔̤̤̪̫͔͕̻̟̥̤̩͚̟̳͔̘̤͈͍͍̯̻̙̺̪̄̈́́͊̋̊́̅͛̉̊̉̅̋̆̔͑̈́͋̑͂̍̌̓̾̆̕̕͝ͅḏ̶̡̨̢̡̛̙͕̘̜͚̺̬̭̜͖͎͚̹̖͈̖̤͎̙̫͎̜̩̰̬̪̣̎͛̓̏̃͊̈́̽̆̒̈́̎̄̍́͘̚̚͝͠͠ͅ!̶̨̨̨̛̛̟̳̼̘͎͔̜͎͚̖̮̰͕̞̦̩̗̫̠͔͕͎͎͎̦̬̫̩̰̲̈́͋̽̀̒͆̄̑̐̀̐̋͆̈́̊̽̊̅̊̀͆͆͑̈͋̌͆͑̂̊͑̚͝͝ͅͅͅ", ""), "hello world!"); 311 | } 312 | -------------------------------------------------------------------------------- /src/mapping.txt: -------------------------------------------------------------------------------- 1 | rirunning shirt with sash dziwKutabireru fallen leaf bkhyrarcrossed swords children crossing tlhighardzurshyrxrrurxblond haired person with crown fire extinguisher tthaaophiuchus khuoekhanda thylhyrtrophy ngwutshondzwyrshushing face with open eyes and hand over mouth turned white shogi piece Shitsuke ghurkhewtchyemountain cableway nwylwukwyrtshwinchhantshengtshiongkhwytshangtthwengkwenggwiggthought balloon school satchel elephant phentelephone receiver tsangtsiangkangaroo khintlhurryrxcircus tent mirror ball kewrchhewtshwutshwanchyrxdzentshyrchhyrchondddhkwaeggphulwiisweet potato tlhabusts in silhouette tlheezzyrxmahjong konhghyrkyrglobe with meridians virgo tswyrtsyrngewrngwyrtshewthwoongwirdzewchhinrewrshwyrkhwarlhewkhondzontsirghewngonlhonchhondzhiwzhuopjjwaeggthinking tsewrpweoggtwisted rightwards arrows counterclockwise lwenspaghetti laughing hwaeggdzarjjweoggvyrxkurxzzurxidentification card file box house abandoned vorstew dzyrKamakiri varhmyrxsewing needle Tsuraneru dwudewrchhwewchwenchhwinlhorntswartshwewshwoongwezhyrxnggeekwanhthwuthewkwarchwonghorntsarshark lwyrlhwitshuchewchhukharjwontserghwentsengurlhweghwyrnornkhwuzewrtswendwyrghonsuspension railway track sswaeggnyiepnyuopnyeoggnyoggzhaazherzhonddwaeggweoggtsornmweoggmwiggbbweoggfwepwiggtweoggkwoonweogglwooflamingo nwiggnwoohyeoggstuck out tongue closed eyes chocolate bar chart Tsumekanmuri hand with index finger and thumb crossed Deshiguramu njyrxcucumber mgbekpemgbonon-potable water buffalo bento jjanhjjenhjjwiggstuck out tongue winking eye standing person (Zheng) thmshhmshjynazar amulet part alternation mark vonarnegative squared cross mark jewzirIkaruga niralternate oneway left way traffic ideograph advantage male sign with stroke horizontal circled crossing lanes jwutswutwujwyrtciangchhwyrchhwentsiongshwiishwaathwaashmkhchhwangornshwonchhendzwanchwanthwanchhworthwyrghwandwewrchwewdzwewliangtcioukhangpiongtcingthuowtciongtshoenjiouliongtsioutshienggooshchcbrtshaasheep kwaatheecheese ttseepwiipwoopwaatwiitwootwaakwiicwiicwoocwaamwiimwoomwaanwaalwaaswiiswooswaaKewashii shooywiiywooywaarwaafwaathiitthootlhothwiinwiipostal horn graveyard bbiprabbit2 bbapbbatbbotbbopbbepbbutbbupdditddipddatddapddopddotddepddutddupggitggatggapggotggetggopggepggutggupssitssipssapssatssopssotssepssutssupshuxjjitjjipjjotjjopjjutjjupnjietnyipnyitnyotnyopnyutnyupngginggaangguaggwanhnengnongddwanhmango mengssangssengssongsswanhsswenhsswinhjjwanhpage facing up kwinhtangtengtwanhtwinjpangpenguin currency exchange shkhdkhmshmmfkhmlkhmtsonthong sandal borngyrchart with downwards trend chwylwonpharlwanKatsura tsinzornghirlhwakwonchenrightwards pushing hand anchor chwitharthengswewghankhwekornpwyrkhwizhwyrphyrdzwolhwyrghiwtswindwarzhwulhenkhenchirzhewgwarngwotewrdzwilhanjyuthoetsoetcyulioufangvangtcietsiutsoulangtcyetsiebamboo ddeggdchcchlllnnnghhkhhaaejnynngiinyjkssbsglobster ggyaeggyeoggwaegglgslbsmotorized wheelchair Khoachlaaisleeping bed maaimeeaerial tramway shraasmiling face with three hearts fast forward tsaasee no evil qaaibbwaeggtaaicaaicwaeggnaaikneeling person nyaeggkaaba szeeObiyaakasu deer nyeenyoaddaeggwedding dduopladder ddoeggjjeeNgaak baggage claim people hugging gguotdagger ggoeggfaaipaaimyaeggface with peeking eye chart with upwards trend ryaeggbbwiggfwihnapnahfirst quarter moon with face bouquet sesquiquadrate quotquudlaquvtlajapanese castle weightlifter tlootlutlvngaaitsvwoozy face bowl with spoon toothbrush two women holding hands put litter in its place of worship confetti ball black square button koosagittarius kehkihkohfortune cookie kahcweoggcwiggnoosoon Xyooyweshriityeoggtyaeggpartying face tyoggjjuoxjjeoggjjietjjoeggjjaeggseedling rweoggrwiggno good jooauelaewSuei lnglarge blue diamond shape with a dot inside reuggshtkyeoggkyuggkyaeggkyiggtokyo tower hyacinth hyigghyuggyugghyoggyiggyoggreminder ribbon vertical male sign with stroke radio button molbgallonbiting lip tanabata tree lotion bottle hamburger nbyrxcapital abcd piprecycled (part pap) pathippopotamus puxpupyrxbbaeggwaning gibbous moon cake bbeoggbbuop{Bismillah Ar-Rahman Ar-Rahimi}hmipvomiting face information source maple leaf hmophmupmute vurxcredit card date department store titnecktie tipping hand person tapstatue of liberty desktop window totnotepad tuptutface with head bandage hindu temple hniphnitconvenience store hnopnotebook with decorative cover hnepnupnut and bolt nurxdisappointed relieved hlyrxggipalms up together orangutan kipkite roller skate kapbasketballer kopkotokepHekutogura kuxpickup truck cowboy hat face frame photo zhepshopping bags ggwapggwepcipcity sunset cotfacepalm stethoscope cut of meat on bone cup with straw construction site ssiepsupervillain ssuxsyringe croissant cherry blossom ssuggrotating light blue heart repeat one piece swimsuit european post office rupeecrutch rruxnjiangbanjo njuoxggyipggyitggyotggyopggyutggyupadhesive bandage njemgbikpiclimbing dhikpambamgbaninja kpotransgender symbol dhokpudhumgbubroken heart exclamation lkkAragane face with diagonal mouth canoe ddweogglarge orange diamond moeggoncoming police car sliding black skull and crossbones file cabinet hourglass flowing sand ssoeggsmall red triangle down ggyaehggyeohsignal strength waning crescent moon ggwabsdark sunglasses jjinhcyaeggcyeoggcyuggkoeggtekHitoe index pointing at the viewer shallow pan of food ping pong poeggthunder cloud rain pinched fingers lmhthjtkhmkhjdhmghjskhaghmakkhykhshinto shrine GwaantmhjmhsmhsmmtmyqmhlhmljjnjmymmnjhkmmljmfnglzhotspringsXiabawxuexuezfootprints nyrdirconstruction worker house with garden triangular ruler twyrSasara shwyamonorail dromedary camel mortar board korunajar dyrnwuarticulated lorry revolving hearts no piracy sneezing face tyrkwuliukoufairy tshauwhite sun small cloud lightning vwetciupaintbrush loemailbox with no mail Chiisai mrs claus kuakuemicrosecondmicroliterapartmentkilometermicrogramicrovoltmicrowattprojectorkilogramkilowattcruzeiroshillingclassical building millibaroentgencalorieguildercentimeheightspercentpiasterhectarepfennigmansionmegatonggyaegsggyaenhggyaenjggyaelggyaelmggyaelbggyaelpggyaelsggyaeltggyaebsggyaelhggyaenggyaessggyeogsggyeonhggyeonjggyeolggyeolmggyeolbggyeolpggyeolsggyeoltggyeobsggyeolhggyeonggyeossggwaegsggwaenhggwaenjggwaelggwaelmggwaelbggwaelpggwaelsggwaeltggwaebsggwaelhggwaenggwaessggweogsggweonhggweonjggweolggweolmggweolbggweolpggweolsggweoltggweobsggweolhggweonggweossddyaeggddyaegsddyaenhddyaenjddyaelbddyaelgddyaelmddyaelsddyaelhddyaelpddyaeltddyaebsddyaessddyaengddyeoggddyeogsddyeonhddyeonjddyeolbddyeolgddyeolmddyeolsddyeolhddyeolpddyeoltddyeobsddyeossddyeongddwaegsddwaenhddwaenjddwaelbddwaelgddwaelmddwaelsddwaelhddwaelpddwaeltddwaebsddwaessddwaengddweogsddweonhddweonjddweolbddweolgddweolmddweolsddweolhddweolpddweoltddweobsddweossddweongbbyaeggbbyaegsbbyaenhbbyaenjbbyaelbbyaelgbbyaelmbbyaelhbbyaelpbbyaelsbbyaeltbbyaebsbbyaengbbyaessbbyeoggbbyeogsbbyeonhbbyeonjbbyeolbbyeolgbbyeolmbbyeolhbbyeolpbbyeolsbbyeoltbbyeobsbbyeongbbyeossbbwaegsbbwaenhbbwaenjbbwaelbbwaelgbbwaelmbbwaelhbbwaelpbbwaelsbbwaeltbbwaebsbbwaengbbwaessbbweogsbbweonhbbweonjbbweolbbweolgbbweolmbbweolhbbweolpbbweolsbbweoltbbweobsbbweongbbweossyaeggssyaegssyaenhssyaenjssyaelbssyaelgssyaelmssyaelssyaelhssyaelpssyaeltssyaebssyaessyaengssyeoggssyeogssyeonhssyeonjssyeolbssyeolgssyeolmssyeolssyeolhssyeolpssyeoltssyeobssyeossyeongsswaegsswaenhsswaenjsswaelbsswaelgsswaelmsswaelsswaelhsswaelpsswaeltsswaebsswaesswaengssweoggssweogssweonhssweonjssweolbssweolgssweolmssweolssweolhssweolpssweoltssweobssweossweongjjyaeggjjyaegsjjyaenhjjyaenjjyaelbjjyaelgjjyaelmjjyaelhjjyaelpjjyaelsjjyaeltjjyaebsjjyaengjjyaessjjyeoggjjyeogsjjyeonhjjyeonjjyeolbjjyeolgjjyeolmjjyeolhjjyeolpjjyeolsjjyeoltjjyeobsjjyeongjjyeossjjwaegsjjwaenhjjwaenjjwaelbjjwaelgjjwaelmjjwaelhjjwaelpjjwaelsjjwaeltjjwaebsjjwaengjjwaessjjweogsjjweonhjjweonjjweolbjjweolgjjweolmjjweolhjjweolpjjweolsjjweoltjjweobsjjweongjjweosstchiongtchiangamperegrinning escudoguineadollarbarrelbushelmicronggaeggaegsggaenhggaenjggaelggaelmggaelbggaelpggaelsggaeltggaebsggaelhggaenggaessggyaggyagsggyanhggyanjggyalggyalmggyalbggyalpggyalsggyaltggyabsggyalhggyanggyassggyaedggyaemggyaejggyaecggyaekggyaepggyaetggeoggeogsggeonhggeonjggeolggeolmggeolbggeolpggeolsggeoltggeobsggeolhggeonggeossggyeodggyeomggyeojggyeocggyeokggyeopggyeotggyeggyegsggyenhggyenjggyelggyelmggyelbggyelpggyelsggyeltggyebsggyelhggyenggyessggwaggwagsggwanjggwalggwalmggwalbggwalpggwalsggwaltggwalhggwanggwassggwaedggwaemggwaejggwaecggwaekggwaepggwaetggwaehggoegsggoenhggoenjggoelggoelmggoelbggoelpggoelsggoeltggoebsggoelhggoenggoessggyogsggyonhggyonjggyolggyolmggyolbggyolpggyolsggyoltggyobsggyolhggyonggyossggweodggweomggweojggweocggweokggweopggweotggweggweohggwegsggwenhggwenjggwelggwelmggwelbggwelpggwelsggweltggwebsggwelhggwenggwessggwigsggwinhggwinjggwilggwilmggwilbggwilpggwilsggwiltggwibsggwilhggwinggwissggyugsggyunhggyunjggyulggyulmggyulbggyulpggyulsggyultggyubsggyulhggyunggyussggeuggeugsggeunhggeunjggeulggeulmggeulbggeulpggeulsggeultggeubsggeulhggeunggeussggyigsggyinhggyinjggyilggyilmggyilbggyilpggyilsggyiltggyibsggyilhggyinggyissnyaegsnyaenhnyaenjnyaelbnyaelgnyaelmnyaelhnyaelpnyaelsnyaeltnyaebsnyaengnyaessnyeogsnyeonhnyeonjnyeolbnyeolgnyeolmnyeolsnyeolhnyeolpnyeoltnyeobsnyeossnyeongnwaeggnwaegsnwaenjnwaelgnwaenhnwaelbnwaelmnwaelsnwaeltnwaelhnwaelpnwaebsnwaengnwaessnweogsnweonhnweonjnweolgnweolmnweolbnweolpnweolsnweoltnweobsnweolhnweongnweossddaegsddaenhddaenjddaelbddaelgddaelmddaelsddaelhddaelpddaeltddaebsddaessddaengddyaggddyagsddyanhddyanjddyalbddyalgddyalmddyalsddyalhddyalpddyaltddyabsddyassddyangddyaeddyaemddyaecddyaejddyaekddyaehddyaepddyaetddeoggddeogsddeonhddeonjddeolbddeolgddeolmddeolsddeolhddeolpddeoltddeobsddeossddeongddyeoddyeomddyeocddyeojddyeokddyeohddyeopddyeotddyeggddyegsddyenhddyenjddyelbddyelgddyelmddyelsddyelhddyelpddyeltddyebsddyessddyengddwaggddwagsddwanjddwalbddwalgddwalmddwalsddwalhddwalpddwaltddwabsddwassddwangddwaeddwaemddwaecddwaejddwaekddwaehddwaepddwaetddoegsddoenhddoenjddoelbddoelgddoelmddoelsddoelhddoelpddoeltddoebsddoessddoengddyoggddyogsddyonhddyonjddyolbddyolgddyolmddyolsddyolhddyolpddyoltddyobsddyossddyongddweoddweomddweocddweojddweokddweohddweopddweotddweggddwegsddwenhddwenjddwelbddwelgddwelmddwelsddwelhddwelpddweltddwebsddwessddwengddwiggddwigsddwinhddwinjddwilbddwilgddwilmddwilsddwilhddwilpddwiltddwibsddwissddwingddyuggddyugsddyunhddyunjddyulbddyulgddyulmddyulsddyulhddyulpddyultddyubsddyussddyungddeuggddeugsddeunhddeunjddeulbddeulgddeulmddeulsddeulhddeulpddeultddeubsddeussddeungddyiggddyigsddyinhddyinjddyilbddyilgddyilmddyilsddyilhddyilpddyiltddyibsddyissddyingryaegsryaenjryaelgryaenhryaelbryaelmryaelsryaeltryaelhryaelpryaebsryaengryaessryeoggryeogsryeonhryeonjryeolgryeolmryeolbryeolpryeolsryeoltryeobsryeolhryeongryeossrwaeggrwaegsrwaenhrwaenjrwaelbrwaelgrwaelmrwaelhrwaelprwaelsrwaeltrwaebsrwaengrwaessrweogsrweonhrweonjrweolbrweolgrweolmrweolsrweolhrweolprweoltrweobsrweossrweongmyaegsmyaenhmyaenjmyaelgmyaelmyaelbmyaelpmyaelsmyaeltmyaebsmyaelhmyaengmyaessmyeoggmyeogsmyeonhmyeonjmyeolbmyeolgmyeolmyeolhmyeolpmyeolsmyeoltmyeobsmyeongmyeossmwaeggmwaegsmwaenhmwaenjmwaelbmwaelgmwaelmwaelsmwaelhmwaelpmwaeltmwaebsmwaessmwaengmweogsmweonjmweolgmweonhmweolbmweolmweolsmweoltmweolhmweolpmweobsmweongmweossbbaegsbbaenhbbaenjbbaelbbaelgbbaelmbbaelhbbaelpbbaelsbbaeltbbaebsbbaengbbaessbbyaggbbyagsbbyanhbbyanjbbyalbbyalgbbyalmbbyalhbbyalpbbyalsbbyaltbbyabsbbyangbbyassbbyaedbbyaembbyaecbbyaejbbyaehbbyaekbbyaepbbyaetbbeogsbbeonhbbeonjbbeolbbeolgbbeolmbbeolhbbeolpbbeolsbbeoltbbeobsbbeongbbeossbbyeodbbyeombbyeocbbyeojbbyeohbbyeokbbyeopbbyeotbbyeggbbyegsbbyenhbbyenjbbyelbbyelgbbyelmbbyelhbbyelpbbyelsbbyeltbbyebsbbyengbbyessbbwaggbbwagsbbwanhbbwanjbbwalbbwalgbbwalmbbwalhbbwalpbbwalsbbwaltbbwabsbbwangbbwassbbwaedbbwaembbwaecbbwaejbbwaehbbwaekbbwaepbbwaetbboeggbboegsbboenhbboenjbboelbboelgbboelmbboelhbboelpbboelsbboeltbboebsbboengbboessbbyoggbbyogsbbyonhbbyonjbbyolbbyolgbbyolmbbyolhbbyolpbbyolsbbyoltbbyobsbbyongbbyossbbweodbbweombbweocbbweojbbweohbbweokbbweopbbweotbbweggbbwegsbbwenhbbwenjbbwelbbwelgbbwelmbbwelhbbwelpbbwelsbbweltbbwebsbbwengbbwessbbwigsbbwinhbbwinjbbwilbbwilgbbwilmbbwilhbbwilpbbwilsbbwiltbbwibsbbwingbbwissbbyuggbbyugsbbyunhbbyunjbbyulbbyulgbbyulmbbyulhbbyulpbbyulsbbyultbbyubsbbyungbbyussbbeuggbbeugsbbeunhbbeunjbbeulbbeulgbbeulmbbeulhbbeulpbbeulsbbeultbbeubsbbeungbbeussbbyiggbbyigsbbyinhbbyinjbbyilbbyilgbbyilmbbyilhbbyilpbbyilsbbyiltbbyibsbbyingbbyissaeggssaegssaenhssaenjssaelbssaelgssaelmssaelssaelhssaelpssaeltssaebssaessaengssyaggssyagssyanhssyanjssyalbssyalgssyalmssyalssyalhssyalpssyaltssyabssyassyangssyaedssyaemssyaecssyaejssyaekssyaehssyaepssyaetsseoggsseogsseonhsseonjsseolbsseolgsseolmsseolsseolhsseolpsseoltsseobsseosseongssyeodssyeomssyeocssyeojssyeokssyeohssyeopssyeotssyeggssyegssyenhssyenjssyelbssyelgssyelmssyelssyelhssyelpssyeltssyebssyessyengsswaggsswagsswanjsswalbsswalgsswalmsswalsswalhsswalpsswaltsswabsswasswangsswaedsswaemsswaecsswaejsswaeksswaehsswaepsswaetssoegssoenhssoenjssoelbssoelgssoelmssoelssoelhssoelpssoeltssoebssoessoengssyoggssyogssyonhssyonjssyolbssyolgssyolmssyolssyolhssyolpssyoltssyobssyossyongssweodssweomssweocssweojssweokssweohssweopssweotssweggsswegsswenjsswelbsswelgsswelmsswelsswelhsswelpssweltsswebsswesswengsswiggsswigsswinjsswilbsswilgsswilmsswilsswilhsswilpsswiltsswibsswisswingssyuggssyugssyunhssyunjssyulbssyulgssyulmssyulssyulhssyulpssyultssyubssyussyungsseuggsseugsseunhsseunjsseulbsseulgsseulmsseulsseulhsseulpsseultsseubsseusseungssyiggssyigssyinhssyinjssyilbssyilgssyilmssyilssyilhssyilpssyiltssyibssyissyingjjaegsjjaenhjjaenjjaelbjjaelgjjaelmjjaelhjjaelpjjaelsjjaeltjjaebsjjaengjjaessjjyaggjjyagsjjyanhjjyanjjyalbjjyalgjjyalmjjyalhjjyalpjjyalsjjyaltjjyabsjjyangjjyassjjyaedjjyaemjjyaecjjyaejjyaehjjyaekjjyaepjjyaetjjeogsjjeonhjjeonjjeolbjjeolgjjeolmjjeolhjjeolpjjeolsjjeoltjjeobsjjeongjjeossjjyeodjjyeomjjyeocjjyeojjyeohjjyeokjjyeopjjyeotjjyeggjjyegsjjyenhjjyenjjyelbjjyelgjjyelmjjyelhjjyelpjjyelsjjyeltjjyebsjjyengjjyessjjwaggjjwagsjjwanjjwalbjjwalgjjwalmjjwalhjjwalpjjwalsjjwaltjjwabsjjwangjjwassjjwaedjjwaemjjwaecjjwaejjwaehjjwaekjjwaepjjwaetjjoegsjjoenhjjoenjjoelbjjoelgjjoelmjjoelhjjoelpjjoelsjjoeltjjoebsjjoengjjoessjjyoggjjyogsjjyonhjjyonjjyolbjjyolgjjyolmjjyolhjjyolpjjyolsjjyoltjjyobsjjyongjjyossjjweodjjweomjjweocjjweojjweohjjweokjjweopjjweotjjweggjjwegsjjwenhjjwenjjwelbjjwelgjjwelmjjwelhjjwelpjjwelsjjweltjjwebsjjwengjjwessjjwigsjjwinhjjwinjjwilbjjwilgjjwilmjjwilhjjwilpjjwilsjjwiltjjwibsjjwingjjwissjjyuggjjyugsjjyunhjjyunjjyulbjjyulgjjyulmjjyulhjjyulpjjyulsjjyultjjyubsjjyungjjyussjjeuggjjeugsjjeunhjjeunjjeulbjjeulgjjeulmjjeulhjjeulpjjeulsjjeultjjeubsjjeungjjeussjjyiggjjyigsjjyinhjjyinjjyilbjjyilgjjyilmjjyilhjjyilpjjyilsjjyiltjjyibsjjyingjjyisscyaegscyaenhcyaenjcyaelbcyaelgcyaelmcyaelscyaelhcyaelpcyaeltcyaebscyaesscyaengcyeogscyeonjcyeolgcyeonhcyeolbcyeolmcyeolscyeoltcyeolhcyeolpcyeobscyeongcyeosscwaegscwaenhcwaenjcwaelgcwaelmcwaelbcwaelpcwaelscwaeltcwaebscwaelhcwaengcwaesscweogscweonhcweonjcweolbcweolgcweolmcweolhcweolpcweolscweoltcweobscweongcweosskyaegskyaenjkyaelgkyaenhkyaelbkyaelmkyaelskyaeltkyaelhkyaelpkyaebskyaengkyaesskyeogskyeonhkyeonjkyeolgkyeolmkyeolbkyeolpkyeolskyeoltkyeobskyeolhkyeongkyeosskwaegskwaenhkwaenjkwaelbkwaelgkwaelmkwaelhkwaelpkwaelskwaeltkwaebskwaengkwaesskweoggkweogskweonhkweonjkweolbkweolgkweolmkweolskweolhkweolpkweoltkweobskweosskweongtyaegstyaenhtyaenjtyaelgtyaelmtyaelbtyaelptyaelstyaeltyaebstyaelhtyaengtyaesstyeogstyeonhtyeonjtyeolbtyeolgtyeolmtyeolhtyeolptyeolstyeoltyeobstyeongtyeosstwaeggtwaegstwaenhtwaenjtwaelbtwaelgtwaelmtwaelstwaelhtwaelptwaeltwaebstwaesstwaengtweogstweonjtweolgtweonhtweolbtweolmtweolstweoltweolhtweolptweobstweongtweosspyaeggpyaegspyaenhpyaenjpyaelbpyaelgpyaelmpyaelhpyaelpyaelspyaeltpyaebspyaengpyaesspyeoggpyeogspyeonhpyeonjpyeolbpyeolgpyeolmpyeolspyeolhpyeolpyeoltpyeobspyeosspyeongpwaeggpwaegspwaenjpwaelgpwaenhpwaelbpwaelmpwaelspwaeltpwaelhpwaelpwaebspwaengpwaesspweogspweonhpweonjpweolgpweolmpweolbpweolpweolspweoltpweobspweolhpweongpweosshyaegghyaegshyaenhyaenjhyaelbhyaelghyaelmhyaelshyaelhyaelphyaelthyaebshyaesshyaenghyeogshyeonjhyeolghyeonhyeolbhyeolmhyeolshyeolthyeolhyeolphyeobshyeonghyeosshwaegshwaenhwaenjhwaelghwaelmhwaelbhwaelphwaelshwaelthwaebshwaelhwaenghwaesshweogghweogshweonhweonjhweolbhweolghweolmhweolhweolphweolshweolthweobshweonghweosstshwentchioutshiouyeoyaqhwaaqhweekxwaakxweenngoonngaashwoyalphacaratouncegammacuriekronedozenpartspiculfaradfranchertzpencepound face with thermometer rublebbiepbbietbbiexbbuoxbburxnbiepnbiexnburxhmiexhmiephmuoxhmuophmurxddiexddiepdduoxddurxndiexndurxhniephniethniexhnuoxhliexhliephluophluoxhlurxggiexggiepgguoxgguopggurxmgiexmguopmguoxmgurxhxiethxiexhxiephxuothxuoxhxuopngiepngiexnguotnguoxzzietzziexzziepnziexnziepnzuoxnzurxnzyrxssiexssyrxzhuoxzhurxchuopchuotchuoxchurxrruoxnrurxnryrxshuoxshuopshurxjjiexjjiepjjuopjjurxnjiepnjiexnjurxnyietnyiexnyuoxggaggagsgganhgganjggalggalmggalbggalpggalsggaltggabsggalhgganggassggaedggaemggaejggaecggaekggaepggaetggaehggyadggyamggyajggyacggyakggyapggyatggyahggeodggeomggeojggeocggeokggeopggeotggeggeohggegsggenhggenjggelggelmggelbggelpggelsggeltggebsggelhggenggessggyedggyemggyejggyecggyekggyepggyetggoggyehggogsggonhggonjggolggolmggolbggolpggolsggoltggobsggolhggonggossggwadggwamggwajggwacggwakggwatggwahggoedggoemggoejggoecggoekggoepggoetggoehggyodggyomggyojggyocggyokgguggyohggugsggunhggunjggulggulmggulbggulpggulsggultggubsggulhggunggussggwemggwejggwecggwekggwetggwehggwidggwimggwijggwicggwikggwipggwitggwihggyudggyumggyujggyucggyukggyuhggeudggeumggeujggeucggeukggeupggeutggeuhggyidggyimggyijggyicggyikggiggyihggigsgginhgginjggilggilmggilbggilpggilsggiltggibsggilhggissnaeggnaegsnaenhnaenjnaelbnaelgnaelmnaelhnaelpnaelsnaeltnaebsnaengnaessnyaggnyagsnyanhnyanjnyalbnyalgnyalmnyalhnyalpnyalsnyaltnyabsnyangnyassnyaednyaemnyaecnyaejnyaehnyaeknyaepnyaetneoggneogsneonhneonjneolbneolgneolmneolhneolpneolsneoltneobsneongneossnyeodnyeomnyeocnyeojnyeoknyeohnyeopnyeotnyeggnyegsnyenhnyenjnyelbnyelgnyelmnyelsnyelhnyelpnyeltnyebsnyessnyengnwaggnwagsnwanjnwalgnwanhnwalbnwalmnwalsnwaltnwalhnwalpnwabsnwangnwassnwaednwaemnwaecnwaejnwaeknwaetnwaehnwaepnoeggnoegsnoenjnoelgnoenhnoelbnoelmnoelsnoeltnoelhnoelpnoebsnoengnoessnyogsnyonjnyolgnyonhnyolbnyolmnyolsnyoltnyolhnyolpnyobsnyongnyossnweodnweomnweojnweocnweoknweopnweotnweggnweohnwegsnwenhnwenjnwelgnwelmnwelbnwelpnwelsnweltnwebsnwelhnwengnwessnwigsnwinhnwinjnwilgnwilmnwilbnwilpnwilsnwiltnwibsnwilhnwingnwissnyuggnyugsnyunhnyunjnyulgnyulmnyulbnyulpnyulsnyultnyubsnyulhnyungnyussneuggneugsneunhneunjneulgneulmneulbneulpneulsneultneubsneulhneungneussnyiggnyigsnyinhnyinjnyilgnyilmnyilbnyilpnyilsnyiltnyibsnyilhnyingnyissddaggddagsddanhddanjddalbddalgddalmddalsddalhddalpddaltddabsddassddangddaeddaemddaecddaejddaekddaehddaepddaetddyaddyamddyacddyajddyakddyahddyapddyatddeoddeomddeocddeojddeokddeohddeopddeotddegsddenhddenjddelbddelgddelmddelsddelhddelpddeltddebsddessddengddyeddyemddyecddyejddyekddyehddyepddyetddoggddogsddonhddonjddolbddolgddolmddolsddolhddolpddoltddobsddossddongddwaddwamddwacddwajddwakddwahddwapddwatddoeddoemddoecddoejddoekddoehddoepddoetddyoddyomddyocddyojddyokddyohddyopddyotdduggddugsddunhddunjddulbddulgddulmddulsddulhddulpddultddubsddussddungddweddwemddwecddwejddwekddwehddwepddwetddwiddwimddwicddwijddwikddwihddwipddwitddyuddyumddyucddyujddyukddyuhddyupddyutddeuddeumddeucddeujddeukddeuhddeupddeutddyiddyimddyicddyijddyikddyihddyipddyitddiggddigsddinhddinjddilbddilgddilmddilsddilhddilpddiltddibsddissraeggraegsraenjraelgraenhraelbraelmraelsraeltraelhraelpraebsraengraessryaggryagsryanjryalgryanhryalbryalmryalsryaltryalhryalpryabsryangryassryaedryaemryaecryaejryaekryaetryaehryaepreoggreogsreonjreolgreonhreolbreolmreolsreoltreolhreolpreobsreongreossryeodryeomryeojryeocryeokryeopryeotryeggryeohryegsryenhryenjryelgryelmryelbryelpryelsryeltryebsryelhryengryessrwaggrwagsrwanhrwanjrwalbrwalgrwalmrwalhrwalprwalsrwaltrwabsrwangrwassrwaedrwaemrwaecrwaejrwaehrwaekrwaeprwaetroeggroegsroenhroenjroelbroelgroelmroelhroelproelsroeltroebsroengroessryoggryogsryonhryonjryolbryolgryolmryolhryolpryolsryoltryobsryongryossrweodrweomrweocrweojrweokrweohrweoprweotrweggrwegsrwenhrwenjrwelbrwelgrwelmrwelsrwelhrwelprweltrwebsrwessrwengrwigsrwinhrwinjrwilbrwilgrwilmrwilsrwilhrwilprwiltrwibsrwissrwingryuggryugsryunhryunjryulbryulgryulmryulsryulhryulpryultryubsryussryungreugsreunhreunjreulbreulgreulmreulsreulhreulpreultreubsreussreungryiggryigsryinhryinjryilbryilgryilmryilsryilhryilpryiltryibsryisscrying cat face maeggmaegsmaenhmaenjmaelgmaelmaelbmaelpmaelsmaeltmaebsmaelhmaengmaessmyaggmyagsmyanhmyanjmyalgmyalmyalbmyalpmyalsmyaltmyabsmyalhmyangmyassmyaedmyaemyaejmyaecmyaekmyaepmyaetmeoggmyaehmeogsmeonhmeonjmeolgmeolmeolbmeolpmeolsmeoltmeobsmeolhmeongmeossmyeodmyeomyeocmyeojmyeohmyeokmyeopmyeotmyeggmyegsmyenhmyenjmyelbmyelgmyelmyelhmyelpmyelsmyeltmyebsmyengmyessmwaggmwagsmwanhmwanjmwalbmwalgmwalmwalsmwalhmwalpmwaltmwabsmwassmwangmwaedmwaemwaecmwaejmwaekmwaehmwaepmwaetmoegsmoenhmoenjmoelbmoelgmoelmoelsmoelhmoelpmoeltmoebsmoessmoengmyoggmyogsmyonhmyonjmyolbmyolgmyolmyolsmyolhmyolpmyoltmyobsmyossmyongmweodmweomweocmweojmweokmweotmweohmweopmweggmwegsmwenjmwelgmwenhmwelbmwelmwelsmweltmwelhmwelpmwebsmwengmwessmwigsmwinjmwilgmwinhmwilbmwilmwilsmwiltmwilhmwilpmwibsmwingmwissmyuggmyugsmyunjmyulgmyunhmyulbmyulmyulsmyultmyulhmyulpmyubsmyungmyussmeuggmeugsmeunjmeulgmeunhmeulbmeulmeulsmeultmeulhmeulpmeubsmeungmeussmyiggmyigsmyinjmyilgmyinhmyilbmyilmyilsmyiltmyilhmyilpmyibsmyingmyissbbaggbbagsbbanhbbanjbbalbbalgbbalmbbalhbbalpbbalsbbaltbbabsbbangbbassbbaedbbaembbaecbbaejbbaehbbaekbbaepbbaetbbyadbbyambbyacbbyajbbyahbbyakbbyapbbyatbbeodbbeombbeocbbeojbbeohbbeokbbeopbbeotbbeggbbegsbbenhbbenjbbelbbelgbbelmbbelhbbelpbbelsbbeltbbebsbbengbbessbbyedbbyembbyecbbyejbbyehbbyekbbyepbbyetbboggbbogsbbonhbbonjbbolbbolgbbolmbbolhbbolpbbolsbboltbbobsbbongbbossbbwadbbwambbwacbbwajbbwahbbwakbbwapbbwatbboedbboembboecbboejbboehbboekbboepbboetbbyodbbyombbyocbbyojbbyohbbyokbbyopbbyotbbuggbbugsbbunhbbunjbbulbbulgbbulmbbulhbbulpbbulsbbultbbubsbbungbbussbbwedbbwembbwecbbwejbbwehbbwekbbwepbbwetbbwidbbwimbbwicbbwijbbwihbbwikbbwipbbwitbbyudbbyumbbyucbbyujbbyuhbbyukbbyupbbyutbbeudbbeumbbeucbbeujbbeuhbbeukbbeupbbeutbbyidbbyimbbyicbbyijbbyihbbyikbbyipbbyitbbiggbbigsbbinhbbinjbbilbbilgbbilmbbilhbbilpbbilsbbiltbbibsbbingbbissaggssagssanhssanjssalbssalgssalmssalssalhssalpssaltssabssassaedssaemssaecssaejssaekssaehssaepssaetssyadssyamssyacssyajssyakssyahssyapssyatsseodsseomsseocsseojsseoksseohsseopsseotsseggssegssenhssenjsselbsselgsselmsselsselhsselpsseltssebssessyedssyemssyecssyejssyekssyehssyepssyetssoggssogssonhssonjssolbssolgssolmssolssolhssolpssoltssobssosswadsswamsswacsswajsswaksswahsswapsswatssoedssoemssoecssoejssoekssoehssoepssoetssyodssyomssyocssyojssyokssyohssyopssyotssugssunhssunjssulbssulgssulmssulssulhssulpssultssubssussungsswedsswemsswecsswejssweksswehsswepsswetsswidsswimsswicsswijsswiksswihsswipsswitssyudssyumssyucssyujssyukssyuhssyupssyutsseudsseumsseucsseujsseuksseuhsseupsseutssyidssyimssyicssyijssyikssyihssyipssyitssiggssigssinhssinjssilbssilgssilmssilssilhssilpssiltssibssissjjaggjjagsjjanjjalbjjalgjjalmjjalhjjalpjjalsjjaltjjabsjjangjjassjjaedjjaemjjaecjjaejjaehjjaekjjaepjjaetjjyadjjyamjjyacjjyajjyahjjyakjjyapjjyatjjeodjjeomjjeocjjeojjeohjjeokjjeopjjeotjjeggjjegsjjenjjelbjjelgjjelmjjelhjjelpjjelsjjeltjjebsjjengjjessjjyedjjyemjjyecjjyejjyehjjyekjjyepjjyetjjoggjjogsjjonhjjonjjolbjjolgjjolmjjolhjjolpjjolsjjoltjjobsjjongjjossjjwadjjwamjjwacjjwajjwahjjwakjjwapjjwatjjoedjjoemjjoecjjoejjoehjjoekjjoepjjoetjjyodjjyomjjyocjjyojjyohjjyokjjyopjjyotjjuggjjugsjjunhjjunjjulbjjulgjjulmjjulhjjulpjjulsjjultjjubsjjungjjussjjwedjjwemjjwecjjwejjwehjjwekjjwepjjwetjjwidjjwimjjwicjjwijjwihjjwikjjwipjjwitjjyudjjyumjjyucjjyujjyuhjjyukjjyupjjyutjjeudjjeumjjeucjjeujjeuhjjeukjjeupjjeutjjyidjjyimjjyicjjyijjyihjjyikjjyipjjyitjjiggjjigsjjinjjilbjjilgjjilmjjilhjjilpjjilsjjiltjjibsjjingjjisscaeggcaegscaenhcaenjcaelbcaelgcaelmcaelscaelhcaelpcaeltcaebscaesscaengcyaggcyagscyanhcyanjcyalbcyalgcyalmcyalscyalhcyalpcyaltcyabscyasscyangcyaedcyaemcyaecyaejcyaekcyaehcyaepcyaetceoggceogsceonhceonjceolbceolgceolmceolsceolhceolpceoltceobsceossceongcyeodcyeomcyeocyeojcyeokcyeotcyeohcyeopcyeggcyegscyenjcyelgcyenhcyelbcyelmcyelscyeltcyelhcyelpcyebscyengcyesscwaggcwagscwanhcwanjcwalgcwalmcwalbcwalpcwalscwaltcwabscwalhcwangcwasscwaedcwaemcwaejcwaecwaekcwaepcwaetcoeggcwaehcoegscoenhcoenjcoelgcoelmcoelbcoelpcoelscoeltcoebscoelhcoengcoesscyoggcyogscyonhcyonjcyolgcyolmcyolbcyolpcyolscyoltcyobscyolhcyongcyosscweodcweomcweocweojcweohcweokcweopcweotcweggcwegscwenhcwenjcwelbcwelgcwelmcwelhcwelpcwelscweltcwebscwengcwesscwigscwinhcwinjcwilbcwilgcwilmcwilhcwilpcwilscwiltcwibscwingcwisscyugscyunhcyunjcyulbcyulgcyulmcyulhcyulpcyulscyultcyubscyungcyussceuggceugsceunhceunjceulbceulgceulmceulhceulpceulsceultceubsceungceusscyiggcyigscyinhcyinjcyilbcyilgcyilmcyilhcyilpcyilscyiltcyibscyingcyisskaeggkaegskaenjkaelgkaenhkaelbkaelmkaelskaeltkaelhkaelpkaebskaengkaesskyaggkyagskyanjkyalgkyanhkyalbkyalmkyalskyaltkyalhkyalpkyabskyangkyasskyaedkyaemkyaeckyaejkyaekyaetkyaehkyaepkeoggkeogskeonjkeolgkeonhkeolbkeolmkeolskeoltkeolhkeolpkeobskeongkeosskyeodkyeomkyeojkyeockyeokyeopkyeotkyeggkyeohkyegskyenhkyenjkyelgkyelmkyelbkyelpkyelskyeltkyebskyelhkyengkyesskwaggkwagskwanjkwalbkwalgkwalmkwalhkwalpkwalskwaltkwabskwangkwasskwaedkwaemkwaeckwaejkwaehkwaekwaepkwaetkoegskoenhkoenjkoelbkoelgkoelmkoelhkoelpkoelskoeltkoebskoengkoesskyoggkyogskyonhkyonjkyolbkyolgkyolmkyolhkyolpkyolskyoltkyobskyongkyosskweodkweomkweockweojkweokweohkweopkweotkweggkwegskwenhkwenjkwelbkwelgkwelmkwelskwelhkwelpkweltkwebskwesskwiggkwigskwinjkwilbkwilgkwilmkwilskwilhkwilpkwiltkwibskwisskwingkyugskyunhkyunjkyulbkyulgkyulmkyulskyulhkyulpkyultkyubskyusskyungkeuggkeugskeunhkeunjkeulbkeulgkeulmkeulskeulhkeulpkeultkeubskeusskeungkyigskyinhkyinjkyilbkyilgkyilmkyilskyilhkyilpkyiltkyibskyisskyingtaeggtaegstaenhtaenjtaelgtaelmtaelbtaelptaelstaeltaebstaelhtaengtaesstyaggtyagstyanhtyanjtyalgtyalmtyalbtyalptyalstyaltyabstyalhtyangtyasstyaedtyaemtyaejtyaectyaektyaeptyaeteoggtyaehteogsteonhteonjteolgteolmteolbteolpteolsteolteobsteolhteongteosstyeodtyeomtyeoctyeojtyeohtyeoktyeoptyeotyeggtyegstyenhtyenjtyelbtyelgtyelmtyelhtyelptyelstyeltyebstyengtyesstwaggtwagstwanjtwalbtwalgtwalmtwalstwalhtwalptwaltwabstwasstwangtwaedtwaemtwaectwaejtwaektwaehtwaeptwaetoeggtoegstoenhtoenjtoelbtoelgtoelmtoelstoelhtoelptoeltoebstoesstoengtyogstyonhtyonjtyolbtyolgtyolmtyolstyolhtyolptyoltyobstyosstyongtweodtweomtweoctweojtweoktweotweohtweoptweggtwegstwenjtwelgtwenhtwelbtwelmtwelstweltwelhtwelptwebstwengtwesstwiggtwigstwilgtwinhtwilbtwilmtwilstwiltwilhtwilptwibstwingtwisstyuggtyugstyunjtyulgtyunhtyulbtyulmtyulstyultyulhtyulptyubstyungtyussteuggteugsteunjteulgteunhteulbteulmteulsteulteulhteulpteubsteungteusstyiggtyigstyinjtyilgtyinhtyilbtyilmtyilstyiltyilhtyilptyibstyisspaeggpaegspaenhpaenjpaelbpaelgpaelmpaelhpaelpaelspaeltpaebspaengpaesspyaggpyagspyanhpyanjpyalbpyalgpyalmpyalhpyalpyalspyaltpyabspyangpyasspyaedpyaempyaecpyaejpyaehpyaekpyaepyaetpeoggpeogspeonhpeonjpeolbpeolgpeolmpeolhpeolpeolspeoltpeobspeongpeosspyeodpyeompyeocpyeojpyeokpyeohpyeopyeotpyeggpyegspyenhpyenjpyelbpyelgpyelmpyelspyelhpyelpyeltpyebspyesspyengpwaggpwagspwanjpwalgpwanhpwalbpwalmpwalspwaltpwalhpwalpwabspwangpwasspwaedpwaempwaecpwaejpwaekpwaetpwaehpwaepoegspoenjpoelgpoenhpoelbpoelmpoelspoeltpoelhpoelpoebspoengpoesspyoggpyogspyonjpyolgpyonhpyolbpyolmpyolspyoltpyolhpyolpyobspyongpyosspweodpweompweojpweocpweokpweopweotpweggpweohpwegspwenhpwenjpwelgpwelmpwelbpwelpwelspweltpwebspwelhpwengpwesspwigspwinhpwinjpwilgpwilmpwilbpwilpwilspwiltpwibspwilhpwingpwisspyuggpyugspyunhpyunjpyulgpyulmpyulbpyulpyulspyultpyubspyulhpyungpyusspeuggpeugspeunhpeunjpeulgpeulmpeulbpeulpeulspeultpeubspeulhpeungpeusspyiggpyigspyinhpyinjpyilgpyilmpyilbpyilpyilspyiltpyibspyilhpyingpyisshaegghaegshaenhaenjhaelbhaelghaelmhaelshaelhaelphaelthaebshaesshaenghyagghyagshyanhyanjhyalbhyalghyalmhyalshyalhyalphyalthyabshyasshyanghyaedhyaemhyaechyaejhyaekhyaehyaephyaetheoggheogsheonheonjheolbheolgheolmheolsheolheolpheoltheobsheossheonghyeodhyeomhyeochyeojhyeokhyeothyeohyeophyegghyegshyenjhyelghyenhyelbhyelmhyelshyelthyelhyelphyebshyenghyesshwagghwagshwanhwanjhwalghwalmhwalbhwalphwalshwalthwabshwalhwasshwaedhwaemhwaejhwaechwaekhwaephwaethoegghwaehoegshoenhoelghoelmhoelbhoelphoelshoelthoebshoelhoenghoesshyogshyonhyonjhyolghyolmhyolbhyolphyolshyolthyobshyolhyonghyosshweodhweomhweochweojhweohweokhweophweothwegghwegshwenhwenjhwelbhwelghwelmhwelhwelphwelshwelthwebshwesshwigghwigshwinhwinjhwilbhwilghwilmhwilhwilphwilshwilthwibshwinghwisshyugshyunhyunjhyulbhyulghyulmhyulhyulphyulshyulthyubshyunghyussheuggheugsheunheunjheulbheulgheulmheulheulpheulsheultheubsheungheusshyigshyinhyinjhyilbhyilghyilmhyilhyilphyilshyilthyibshyinghyisstprushruusxmtykhwanthorntshwytshartshinchhiwchhartswanghwintchyntchyatchiethangmiongnjingtchyutshiutsuownguowtshainnddoyaengnghheeszaaszwaqwaaqweeqhaaqheeqhwinyaanywakweekxaakxeekxwizheezhwaddaaddeegwaagweengwachaaphaapheetzaatzeekaaisaaiyaairaaitthetthilhiilhaalhoogheetteekheekkeedleetleedzeettsottsungaittsattsikwaypwoyshayshoyrwiirwootlweviiisqrtshoachoayoriacregigabriefcase waxing crescent moon desinanoknot picofeet pesobetaslight smile cat slot machine yuanlirakcalpiexpiepuopuoxpurxbbixbbaxbbexbboxbbuxbbypbbytbbyxnbipnbixnbatnbapnbaxnbotnbopinbox tray nbutnbupnbuxnbytnbyxhmitnbyphmixhmathmaxhmaphmothmoxhmuthmuxhmyxhmypmuotfurxviepvietviextiextieptuoptuotuoxddixturxddaxddoxddexdduxnditndixndatndipndapndaxndotndopndoxndepndutnduxnduphnixhnathnaxhnothnoxhnexdoughnut nuophlithlixhliphlathlaxhlaphlexhlophloxhlephluthluxhluphlyphlythlyxlietluotgietkiexkiepkuopkuoxggixggaxggoxggexgguxmgatmgaxmgapmgopmgotmgoxmgepmgexmgutmgupmguxhxithxixhxiphxathxaxhxaphxothxoxhxephxexhxopngatngapngaxngotngoxngexngophiexngepwuoxwuopzuopciepciexcuoxcuopcurxcyrxzzitzzixzzipzzatzzaxzzapzzopzzoxzzepzzexzzuxzzupzzypzzytzzyxnzitnzixnzipnzatnzaxnzapnzoxnzexnzopnzuxnzupnzypnzytnzyxsuoxsuopsurxssixssaxssoxssexssytssypssyxzhatzhaxzhapzhopzhoxzhetzhexzhupzhutzhuxzhytzhyxzhypchapchatchaxchopsticks chotchoxchepchetchexchupchuxchurch chytchyxchyprraxcarrot rretrroprroxrreprrexrrutrruprrytrryxnratrrypnrapnraxnroxnretnrexnropnrepnrutnruxnrupnrypnrytnryxshatshaxshotshoxshetshexshepshutshupshytshypshyxruopjuotqietqiexqiepquoxquopqurxjjixqyrxjjoxjjuxjjytjjypjjyxnjitnjipnjixnjotnjoxnjopnjupnjuxnjytnjyxnjypnyixnyoxnyuxyrxyuotyurxyyrxndaanjuenshambenththgoggles ggadggamggajggacggakggahggedggemggejggecggekggehggodggomggojggocggokggohggudggumggujggucggukgguhggidggimggijggicggikggihnaggnagsnanhnanjnalbnalgnalmnalhnalpnalsnaltnabsnangnassnaednaemnaecnaejnaehnaeknaepnaetnyadnyamnyacnyajnyahnyaknyapnyatneodneomneocneojneohneokneopneotneggnegsnenhnenjnelbnelgnelmnelsnelhnelpneltnebshigh brightness nyednyemnyecnyejnyeknyehnyepnyetnoggnogsnonjnolgnonhnolbnolmnolsnoltnolhnolpnossnwadnwamnwacnwajnwaknwatnwahnwapnoednoemnoecnoejnoeknoetnoehnoepnyodnyomnyocnyojnyoknuggnyohnugsnunhnunjnulgnulmnulbnulpnulsnultnubsnulhnungnussnwednwemnwejnwecnweknwepnwetnwehnwidnwimnwijnwicnwiknwipnwitnwihnyudnyumnyujnyucnyuknyuhneudneumneujneucneukneupneutral face neuhnyidnyimnyijnyicnyikniggnigsnyihninhnilbnilgnilmnilhnilpnilsniltnibsnissdango dolphin older adult sandwich ddaddamddacddajddakddahddeddemddecddejddekddehddetddoddomddocddojddokddohdduddumdducddujddukdduhddiddimddicddijddikddihraggragsranjralgTranhralbralmralsralhralprabsrassraedraemraecraejraekraetraehraepryadryamryacryajryakryatryahryapreodreomreocreojreokreotreggreohreopregsrenhrenjrelgrelmrelprelsreltrebsrelhexpressionless ryedryemryejryecryekryepryetroggrogsryehronhronjrolbrolgrolmrolhrolprolsroltrobsrwadrwamrwacrwajrwahrwakrwaprwatroedroemroecroejroehroekroeproetryodryomryocryojryohryokryopryotruggrugsrunhrunjrulbrulgrulmrulsrulhrulprultrubsrussTrungrwedrwemrwecrwejrwekrwehrweprwetrwidrwimrwicrwijrwikrwihrwiprwitryudryumryucryujryukryuhryupryutreudreumreucreujreukreuhreupreutryidryimryicryijryikryihryipryitriggrigsrinjrilgrinhrilbrilmrilsriltrilhrilpribsear with hearing aid rissmaggmagsmanhmanjmalgmalmalbmalpmalsmaltmabsmalhmassage maedmaemaejmaecmaekmaepmaetmaehmyadmyamyajmyacmyakmyapmyatmyahmeodmeomeojmeocmeokmeopmeotmeggmegsmeohmenhmenjmelbmelgmelmelhmelpmelsmelting face mebsmessmyedmyemyecmyejmyehmyekmyepmyetmoggmogsmonhmonjmolgmolmolsmolhmolpmoltmobsmossmongmwadmwamwacmwajmwakmwahmwapmwatmoedmoemoecmoejmoekmoehmoepmoetmyodmyomyocmyojmyokmyohmyopmyotmuggmugsmunjmulgmunhmulbmulmulsmultmulhmulpmubsmungmussmwedmwemwecmwejmwekmwetmwehmwepmwidmwimwicmwijmwikmwitmwihmwipmyudmyumyucmyujmyukmyutmyuhmyupmeudmeumeucmeujmeukmeutmeuhmeupmyidmyimyicmyijmyikmyitmiggmyihmyipmigsminhminjmilgmilmilbmilpmilsmiltmibsmilhmissface with bags under eyes symbols busstop probing cane bbadbbambbacbbajbbahbbakbbedbbembbecbbejbbehbbekbbetbbodbbombbocbbojbbohbbokbbudbbumbbucbbujbbuhbbukbbidbbimbbicbbijbbihbbikssadssamssacssajssakssahssemclinking glasses ssecssejssekssehssetssodssocssojssokssohssudssumssucssujssukssuhssidssimssijssikssihyin yang wilted flower playing cards juggling jigsaw jjadjjamjjacjjajjahjjakjjapjjatjjedjjemjjecjjejjehjjekjjepjjetjjodjjomjjocjjojjohjjokjjudjjumjjucjjujjuhjjukjjidjjimjjicjjijjihjjikcaggcagscanhcanjcalbcalgcalmcalscalhcaltcabscasscangcaedcaemcaecaejcaekcaehcaepcaetcyadcyamcyacyajcyakcyahcyapcyatceodceomceoceojceokceohceopceotceggcegscenjcelgcenhcelbcelmcelsceltcelhcelpcebscengprincess cyedcyemcyecyejcyekcoggcyehcyepcogsconhconjcolgcolmcolbcolpcolscoltcobscolhcongcosscwadcwamcwajcwacwakcwapcwatcwahcoedcoemcoejcoecoekcoepcoetcoehcyodcyomcyojcyocyokcyopcyotcuggcugscyohcunhcunjculbculgculmculhculpculscultcubscungcusscwedcwemcwecwejcwehcwekcwepcwetcwidcwimcwicwijcwihcwikcwipcwitcyudcyumcyucyujcyuhcyukcyupcyutceudceumceuceujceuhceukceupceutcyidcyimcyicyijcyihcyikcyipcyitciggcigscinhcinjcilbcilgcilmcilscilhcilpciltcibscissors kaggkagskanjkalgkanhkalbkalmkalskaltkalhkalpkabskasskaedkaemkaeckaejkaekaetkaehkaepkyadkyamkyackyajkyakyatkyahkyapkeodkeomkeockeojkeokeotkeggkeohkeopkegskenhkenjkelgkelmkelbkelpkelskeltkebskelhkengkesskyedkyemkyejkyeckyekyepkyetkoggkogskyehkonjkolbkolgkolmkolhkolpkolskoltkobskongkosskwadkwamkwackwajkwahkwakwapkwatkoedkoemkoeckoejkoehkoekoepkoetkyodkyomkyockyojkyohkyokyopkyotkuggkugskunhkunjkulbkulgkulmkulskulhkulpkultkubskusskungkwedkwemkweckwejkwekwehkwepkwetkwidkwimkwickwijkwikwihkwipkwitkyudkyumkyuckyujkyukyuhkyupkyutkeudkeumkeuckeujkeukeuhkeupkeutkyidkyimkyickyijkyikyihkyipkyitkiggkigskinjkilgkinhkilbkilmkilskiltkilhkilpkibskissing smiling eyes taggtagstanhtanjtalgtalmtalbtalptalstaltbookmark tabs talhtasstaedtaemtaejtaectaektaeptaetaehtyadtyamtyajtyactyaktyaptyatyahteodteomteojteocteokteopteoteggtegsteohtenhtenjtelbtelgtelmtelhmantelpiece clock telsteltebstesstyedtyemtyectyejtyehtyektyeptyetoggtogstonhtonjtolbtolgtolmtolstolhtolptoltobstosstwadtwamtwactwajtwaktwahtwaptwatoedtoemtoectoejtoektoehtoeptoetyodtyomtyoctyojtyoktyohtyoptyotuggtugstunjtulgtunhtulbtulmtulstultulhtulptubstungtusstwedtwemtwectwejtwektwetwehtweptwidtwimtwictwijtwiktwitwihtwiptyudtyumtyuctyujtyuktyutyuhtyupteudteumteucteujteukteuteuhteuptyidtyimtyictyijtyiktyitiggtyihtyiptigstinhtinjtilgtilmtilbtilptilstiltibstilhtisspaggpagspanhpanjpalbpalgpalhpalpalspaltpabspassport control knobs paedpaempaecpaejpaehpaekpaepaetpyadpyampyacpyajpyahpyakpyapyatpeodpeompeocpeojpeohpeokpeotpeggpegspenhpenjpelbpelgpelmpelspelhpelpeltpebspesspyedpyempyecpyejpyekpyehpyepyetpoggpogsponjpolgponhpolbpolmpolspoltpolhpolpobsposspwadpwampwacpwajpwakstopwatch pwahpwapoedpoempoecpoejpoekpoetpoehpoepyodpyompyocpyojpyokpyotpuggpyohpyopugspunhpunjpulgpulmpulbpulpheartpulse pultpubspulhpungpusspwedpwempwejpwecpwekpwepwetpwehpwidpwimpwijpwicpwikpwipwitpwihpyudpyumpyujpyucpyukpyupyutpyuhpeudpeumpeujpeucpeukpeupeutpeuhpyidpyimpyijpyicpyikpyipyitpiggpigspyihpinhpinjpilbpilgpilmpilhpilpilspiltpibspisshagghagsNhanhalbhalghalmhalshalhalphalthabshasshaedhaemhaechaejhaekhaehaephaethyadhyamhyajhyakhyahyapheodheomheocheojheokheoheopheothegghegshenjhelgNghenhelbhelshelthelhelphebschess pawn hyedhyechyejhyekhyethogghyehyephogshonhonjholgholmholbholpholsholthobsholhosshwamhwajhwachwaphwathwahoedhoemhoejballet shoes hoechoekhoephoehyodhyomhyojhyochyokhyophyothugs hyohunhunjhulbhulghulmhulhulphulshulthubsZhung husshwedhwemhwechwejhwehwephwethwidhwimhwichwijhwihwikhwiphyudhyumhyuchyujhyuhyukhyupheudheumheucheujheuheukheupheuthyidhyimhyichyijhyihyikhyiphyithigghigsPhinhinjhilbhilghilmhilshilphilthibshissoyeoyoaeyoeoyuaeueoiyaeiyaoiyeotmkhghmmghmymkhmjkhtkhytkhashhymkhyskhySubashiri shrug mniwinpwsptyzzmtnbtyrxytsrqtwsxtzxntqnbtniwtqrswimntmnitmnxtnxxwrrtuiuzuiucuiuquiuxatiuDaZhuanglhwochiwchwuhatching chick nwewlhwukhorzhinzhirlwinjwewngirshorts lhermorntswotwonkhurtwewrornlwewporngwonkhaukhuanjiunguwthaithautcyntsaimioupioukuownuowphailenglong drum ngouPaangueinguambeembuuhokadrssozssuueooopartly sunny xxxsbgsssyaumoyai sziszuszoqeeqwiqhiqhuqhobaabeetle vaaveevwaceekoala kxikxukxowoajaagoal net tzitzupretzel tzobreast feeding fyapiitiikiiciimiiniiliisiiyiifiiqiiqoofire engine ghost Phwung ttukkokkukkakkidlodluqaiorlyyryyuuvaaypaypoykaytay{Salla Llahu Alayhi WaSallam}maynaynoysayprayer beads yayoyThoaifleur-de-lis xiiloamoacockroach soap mouse trap noatoadoazoajoapoaevergreen tree zombie ring buoy pixpaxpoxpurple circle pytpypyxmexmytfipfitfixfapfatfax fox face fopfupfutfuxfytfyxfypvipvitvixvapelevator vaxvotvepvexvopvoxvupvutvuxvypvytvyxorthodox cross deciduous tree tixoncoming taxi textoxman in tuxedo track next nuxflashlight athletic shoe paperclips clapper arrow heading down womans clothes saluting face bowl of hygieia kixkaxkoxkexblack cross shield Chuongwopwoxwexzipper mouth zotOozutsu cixcaxcoxcexcuxcypcytcyxpizza dizzy face six pointed star and crescent saxophone t-rex qitqixqipqopqotqoxqupqutquxqypqytqyxypxyxyytyypyyxfried shrimp nuefompuelttjjhlppueacricket game die Ngachringed planet angel gemini love you gesture hedgehog synagogue pagoda golfer japanese goblin triangular flag on post Tsugumi magic wand tornado pregnant person name badge nacsnake cinema nejneknehnetworked computers nodSakenomoto pig nose monocle face nojKazunoko nohKunugi nudnumnujVulcanusnucnuknuhminidisc black nib nimastonished mechanical arm nijnihnik1st place medal Kikuitadaki bearded person detective guide dog dodo nesting dolls Odoshi document dumpling duck crocodile medical symbol beverage box track previous rajSarake Koraeru menorah rejrekrehrodbullettrain front rohrugby football rudrujrukruhgorilla sunrise over mountains earth americas rijrikwriting hand rihripmadmammoth majchristmas tree memo staff of hermes mejmepvibration mode oncoming automobile mosquito mocmojno smoking mohchipmunk mudmumusical keyboard and mouse mucmujmukmuhmidmimMomiji Kamishimo anatomical heart mikmihbaby bottle face holding back tears Habaki beginner bomb bubble tea bucket hibiscus mountain bicyclist bikini disabled car Hesaki carousel horse racing baseball soccer TaisyouKasugai Utsubo Tsuchi helmet with cross eyeglasses hand splayed yellow circle raised eyebrow toolbox walking wastebasket crayon poultry leg spider web Ishiyumi film frames jack o lantern jellyfish black joker Kajika avocado cactus cajcahcedcemicecream cejcekcetracehorse cojcokcohcujcuhcukpencil2 cimcicijcikcihDekaguramu Nukamiso kackajSakaki takeout box kemkejpancakes keckekodkomkockojkoko skunk kudSukumo Tsukusu kuckujkuhShikimi kickijkiktajtaco Hatahata test tube tejtehtodAdmetostocks tojtohtudtulip tumbler glass lotus position Ntujtuhtiger2 tidtijtiktihwhite spade space invader pajpahpakno pedestrians grapes pecpejpekpehbell pepper petri dish sauropod fishing pole and fish cake pomspock-hand pojpokpohpunch fuelpump pujpucpukpuhpill pimpisces tropical drink pijpihpikhadhammer & sickle Phas Shachi hajshaking face hahChemwhite check mark hejChek hehChomhojPhok hohudChuchujhuhparachute Chidori hijhiking boot Ushihen ooiuiieuaeuoGioiyodsgttbllklqhmnnbchblpmbsjppwaffle thzthhtjmtmjsjasjhsmjtmmqmmhmjhmjmnmanmytjatjyljymmyhyjymyqmyfmymjyKyuu Shuu sparkling heart qizmsiperforming arts sbqwsrnfrReiwamwtStywsbkwdnbdtbnriwntxnreceipt nxnfwxrwnbwxtmanxawtxrprwdzwnmtgrgxsfzmnarqmsnaccordion capricorn awcawqawzuicuixuizTuechueqhttaubauveebNeevaivRooboovstrawberry awvuabRuaviavplhuogyuipewsiwrazor jirmewzerkai-rikuwfoemauflying saucer kautaurus voemnsnmsjmsjnsjsgrskrstrsaouwowiuhnplZhuen wuimuawvawvewvimuearth asia fuaman with gua pi mao aaaYi Ji Yu Xi Li Zhi Fu Yan Jian Lu Qi Wei Xian Shi Ju Bi Wu Qian Jie Yin Hui Ying Zhu Jiao Chi Di Hu Yuan Xie Xu Jing Yao Bo Xiao You Pi Qu Zhen Shu Jue Lian Yun Zi Gu Jia Xun He Cheng Chan Ling Yang Dan Jin Han Mo Si Mi Xuan Qiu Gui Ye Shen Huan Tuo Tan Fan Ti Feng Hong Zhan Shan Chu Lan Liu Xiang Qiao Quan Lin Fen Huo Ge Ya Ni Du Tong Tang Yong Long Wan Lei Mei Kui Chang Huang Zhuo Zhou Chen Xia Qin Duo Wen Fei Luo Su Ke Qiang Jiang Chou Cong Xing Bian Zong Peng Jiu Gan Sui Bei Ai Tu Zhong Zheng Guan Liao Dian Zha Ren Hao Jun Bao Mao Ao Tian Qing Dang Meng Zhe Min Tao Nie Er Ta Pu Ba An Kuang Sheng Ting Gong Xin Lai Gou Man Yue Guo Mu Ci Zhang Zhuan Bing Ping Diao Biao Rong Sha Xiu Cha Zan Dao Gua Die Gao Kun Mian Dong Tiao Juan Song Zhao Dai Pei Cui Ban She Lao Hun Bin Tai Pan Hua Ru Ma Ze Liang Ding Wang Fang Lang Piao Mang Gai Dun Suo Dou Kai Lou Nao Que Bu Po Qiong Chong Shao Chun Gang Geng Xue Lun Kan Hou Sou Can Zao Lie Cuo Na La Wa Ku Da Jiong Pang Luan Chao Ming Kuai Pian Bang Nian Chuo Zhui San Qie Che Zuo Nan Dui Zui Zou Fa Wo Ou Chuang Shang Chuan Guang Kang Heng Beng Ning Nong Duan Deng Shou Miao Kou Cai Nuo Pao Tun Rou Le Ce Cu Zu Se Xiong Cang Huai Teng Tuan Weng Zang Shuo Gun Nai Mie Mai Tou Bai Mou Tui Ran Rui Pin Sao Cao Sun Nu Za Shuang Zhuang Nang Chai Chui Rang Cuan Hang Ruan Kao Hai Men Zai Pai Ben Zun Tie Ken Qun Sa Pa Kong Zhai Zhun Keng Zeng Shui Niao Zuan Yeng Kua Ruo Sai Bie Pou Fou Niu Kuo Rao Yen Yo // Shuai Sang Guai Leng Suan Shun Kuan Ceng Pie Hen Nei Cun Qia Ang Pen Nou Lue Cen Sen Run De Te No (Zhu) Niang Shuan Reng Nuan Zhua Shai Nung Gen Cou Wai Nue Noy Nak Nok Nwu Yel Yem Ka Ne Re Ga Ca Ri In white heart black heart black flag white microphone satellite newspaper military airplane calendar snowman pencil ticket power /// (10) (1) (2) (3) (4) (5) (6) (7) (8) (9) closed lock with key / * >> )] ]] Mushiru (Shui) (Ming) (Jian) Yagate Shiira (Huo) (Yue) (Jin) (She) (You) (Cai) (Lao) (Xue) (Xie) (Xiu) Pyeng Zhuai Chuai Sayng (Mu) (Ri) (Tu) (Te) (Qi) (Zi) Seng Shua Mama Neng Tara Tani Hata Horo Sori Hagi Thak Diu Lia Nay Sin Nin Ten Nen Pwu Hei Koc Zen Zei Kwi Sey Gei Ebi Miu Sip Nam Nap Nuk Lak Sak Yak Yek Yey Yuk Yul Ha Fo Ko So En Ip Ik Im last quarter moon with face slightly frowning face vertical traffic light smiling face with tear leftwards pushing hand two men holding hands white sun rain cloud small orange diamond martial arts uniform doubled female sign black draughts king full moon with face envelope with arrow white square button kissing closed eyes raised back of hand black large square white large square new moon with face bust in silhouette small blue diamond arrow double down wind blowing face couple with heart incoming envelope mailbox with mail lock with ink pen envelope stuffed flatbread manual wheelchair skull crossbones arrow heading up night with stars four leaf clover fork knife plate heart decoration money with wings open file folder mobile phone off no mobile phones arrows clockwise arrow down small two-button mouse bullettrain side steam locomotive mountain railway playground slide flight departure money mouth face folding hand fan dotted line face arrow double up wheel of dharma closed umbrella bridge at night white sun cloud european castle bride with veil man with turban frowning person crossed fingers 2nd place medal 3rd place medal military helmet rightwards hand recycled (pap) beach umbrella fork and knife military medal roller coaster checkered flag speech balloon page with curl straight ruler mailbox closed low brightness arrow up small computer mouse heart eyes cat flight arrival nauseated face exploding head pregnant woman with headscarf baguette bread disguised face mechanical leg nest with eggs pouring liquid root vegetable leftwards hand palm down hand record button white diamond hammer & pick star of david sun with face crossed flags musical score mountain snow bow and arrow tropical fish hatched chick japanese ogre round pushpin electric plug black pushpin speaking head kissing heart speak no evil no entry sign do not litter shopping cart motor scooter auto rickshaw orange circle orange square yellow square purple square pinching hand drooling face curling stone pleading face roll of paper drop of blood carpentry saw leafless tree black knight black circle white circle earth africa level slider ferris wheel movie camera flash musical note field hockey yellow heart purple heart white flower video camera crystal ball ok hand sign hear no evil raised hands raising hand pouting face oncoming bus brown circle brown square green square call me hand cursing face cartwheeling boxing glove yawning face sauna person orange heart red envelope potted plant pregnant man dancing palm up hand alarm clock stop button radioactive arrow right speaker ear of rice cracker green apple snowboarder dragon face monkey face point right older woman love letter green heart floppy disk closed book orange book loudspeaker outbox tray blue circle man in suit compression anger right speech left luggage sweat smile smiling imp kissing cat pouting cat upside down railway car no bicycles baby symbol cruise ship blue square brown heart star struck diving mask flying disc green salad canned food leafy green circle safety vest deaf person firecracker screwdriver low battery fingerprint blueberries ginger root heart hands play pause button white king white club white flag lighthouse curly loop cloud snow hot pepper watermelon shaved ice cube wine glass rice scene wind chime headphones video game basketball motorcycle ice hockey volleyball love hotel baby chick panda face point down point up 2 point left open hands womans hat couplekiss two hearts gift heart card index green book loud sound keycap ten microscope red circle calculator ballot box mount fuji confounded tired face cold sweat drops open mouth smiley cat scream cat helicopter light rail trolleybus skateboard red square fist right clown face lying face water polo milk glass rhinoceros white hair pick billed cap safety pin teddy bear swim brief grey heart pink heart empty nest biohazard recycling ice skate checkmark milky way palm tree sunflower pineapple rice ball ice cream honey pot fried egg champagne fireworks cityscape badminton high heel older man nail care heartbeat clipboard paperclip blue book mag right telescope om symbol clock1030 clock1130 clock1230 trackball persevere anguished grimacing smirk cat roll eyes ambulance speedboat stop sign motorboat fist left handshake zany face wrestling kiwifruit cold face flat shoe butterfly superhero merperson boomerang diya lamp headstone shamrock scorpius aquarius diamonds fountain sparkles gram ton copyleft chestnut eggplant mushroom cherries lollipop cocktail birthday sparkler hospital blowfish lipstick moneybag underage clock130 clock230 clock330 clock430 clock530 clock630 clock730 clock830 clock930 joystick dividers innocent confused unamused no mouth ok woman blue car restroom wireless motorway handball lacrosse softball broccoli hot face lab coat scorpion red hair splatter recycle alembic warning jp bank cyclone rainbow volcano burrito custard popcorn bowling trumpet swimmer racecar camping stadium factory rosette amphora leopard rooster chicken octopus hamster handbag dancers haircut droplet package postbox calling no bell trident clock10 clock11 clock12 printer pensive worried triumph fearful flushed joy cat station minibus tractor rowboat bathtub customs bellhop peanuts coconut unicorn giraffe peacock raccoon microbe cupcake falafel vampire compass maracas plunger placard feather pea pod bubbles 1 - 1/rewind coffee heaven cancer spades scales coffin neuter chains accept hotdog leaves tomato banana tophat guitar violin tennis runner surfer houses desert island mouse2 whale2 turtle poodle rabbit kimono family dancer barber muscle ledger scroll iphone unlock wrench mosque clock1 clock2 clock3 clock4 clock5 clock6 clock7 clock8 clock9 candle old pc sleepy hushed rocket train2 toilet womens shower prince selfie fencer turkey lizard parrot badger oyster beaver garlic butter gloves abacus bricks magnet thread sponge pinata shovel donkey fondue tamale teapot eject timer sleep comet farsi peace aries libra clubs (inf) [key] ferry skier u6307 u7981 u7a7a u5272 u6709 u7533 foggy ocean lemon peach curry ramen fries sushi candy beers santa 8ball notes label snail shell tiger whale dress jeans purse pouch alien guard cupid books pager email hocho japan blush angry weary metro couch girls tools metal robot bacon bagel eagle squid zebra llama otter sloth bison tooth onion troll child brain genie socks broom x ray yo yo flute hamsa coral goose lungs moose olive beans /o/ \o\ ... 333 1/3 2/3 1/5 2/5 3/5 4/5 1/6 1/8 3/8 5/6 5/8 7/8 gear atom golf cool free rose herb pear oden sake beer tada dart park cow2 cat2 goat boar dog2 pig2 bird frog wolf wave clap girl bulb boom dash poop euro seat mega link 1234 dove hole grin wink pray tram door bike bath sled nerd rofl Asari crab lion swan seal foot salt mate mage yarn harp coin hook worm wood +/ -/ leo zap sos fog ski atm rat bug bee cow cop gem zzz 100 Pyen dvd vhs abc gun map yum cry sob hut oil pie bat elf dna axe . :: @ 3 [ ])) cl vs +1 -1 tv Tafu wc {Jalla Jalalahu}Miriguramu Senchigura Yamashina Shitamizu Yashinau (Xiang) (Shang) (Zhong) Shinshi Kaakeru Shikato Chihaya Yasashi Sukesou Muroaji (Zong) Akutsu Toride Tazuna Hameru Noboru Fumoto Hokuso Shibui Ikenie Tatamu Kasuri Yadoru Yofune Sonoko Tasuki Segare Utsuke Suberu Totemo Appare Kazari Kohaze Oroshi Namazu Haraka Kakesu /XX/ (Dai) (Nan) (Shi) (Yin) (Xia) (Zuo) Shime Ppwun Sasou Eburi Tochi Matsu Kasei Shide Myeng Hazou Hashi Kashi Tsuki Ratsu Hyeng Tatsu Shaku Souke Kouji Yingl Usagi Nerau Otoko Irori Dojou Mutsu Shigi Isuka Kayng Nayng Lyeng Thang Thayk Thong /X/ :X: (O) /O/ (Hu) (Ji) (Mi) (Nu) (Yi) (Ye) Twul Cwul Tako Mwun Phos Saai Haai Yama Gake Gomi Kaka Nata Yuri Kura Nagi Haba Yian Moku Soma Sugi Waku Haze Masu Soko Muro Nude Zusa Toan Tamo Niou Qiou Hama Boku Kari Xiou Thon Kesa Iong Kaki Seki Kago Yana Kuji Kume Kinu Wata Kase Nawa Jung Susa Yaji Yuki Sako Diou Yari Yuru Tomo Todo Bora Gori Mate Ugui Kyou Yiao Toki Kyun Lyul Pwul Sayk Sway Yung Chey Hwak Hyen Rial X/ KIS Hal Kel Cal Sol Sya Lam Mok Gem Tha Mal Kes Cis Dia Iri Tay Ama Sho Cay Uys Kwu Hwa Bou Cem Kek Sei Mye Hoy Ori Pal Yie Oki Swu Ton Tap Yai Sik Sok Sem Nuc Hie Ena Kep Eri Eso Nio Kay Kol Kul Kum Non Num Twu Pey Sam Sep Sim Yep Wun Cek Cip Pho Me Ol El Uk Ng Ki Lv Es Hi Em Ei Ro Un On Lo SA ShaoYangWeiJiYangYaoShaoYinShuangxiXiaoChuGuiMeiWuWangLuongLieng1000000000TianRen[Sheng]SuongTongRen[Bai]TuongJyunHeiseiBiengXiaoGuo500000[Dian][Dao]TaiYangGaaiShareAlike900000ZungMongCungNgoiFungDauSauSyunMiengDoi2000001/41/2ch'oai'ai'e300000400000600000700000800000PlutoCoengSoengJoengDungKeoiTaaiHingSeoiZeonSeonWongGungHungLungGwaiHaauGingZingJeoiNgaiSingCyunCeoiBongWaangNhamChauTronChutNhongCuoiJauKeiCamCinSiuJikHauCaumBunGamDatJanNgoangVaiCoiVoiBayDayLoiMungMoiMonthMayo-yaeyu-yeo+10+yo-iyu-ich'ach'ech'ich'uk'ye(ga)(na)(ba)(da)(ma)(ra)(ca)(ja)(sa)(ha)(ka)(pa)(ta)k'wi(c)(r)3/4ch`%004rt216000240yeo-o10.11.12.13.14.15.<<<>>>(a)(b)(d)(g)(h)(j)(k)(m)(n)(p)(s)(t)180150+++|||th.b'ei'ui'wi'oi'hi'ji'mi'y`jm`mm10102104105107108109110112114301302?arNeptune{Salla}UranusGwongHoengZoengGwingGoengGwangLoengKhangAs4S4GiengTruocXuongThienNgoenNgoamThungNhangNgongNhieuMuongGhenhGeoiNaamJoekLeonCoekDeoiTungZaaiHaamSaapLyunHeoiDaamHaanSaanLeoiKwaiFongSaamDaanDaaiDeonLaamCeonZeoiGwokKwanTyunWingTaapJyutMaangTaamBaanNgauGaanCaanGyunKungVangTrutDuoiSanhGiuaSuotQuenNghinVungTroiTromThoiNguaNhauNhocZeotNgatChamGoChatGiupGiauDanhDieuQuaiNhaiPhaoNganThamTreuChumQuatChiuVongXangNuotSyutNhaoNgayThotNhomLaaiGheoNheoThemNieuGwikDzhCh'Ch`AUMbbNU-i(P)VIIISSSSNAKTR.ZimGauJapZiuFauZatCimZikFuiJipBukJukCatMitPutKitZyuZoiLauMauCikGipHakZauBuiGoiZipTimJamPuiSaturnHiuFatGimSapCukZitGatMuiUngNuengZamGapBiuMakGotTh.DamVamHliTauKhenhBomButGitXumBamVachVaoLimLokMocDutBuaBitWuiNhungRotCutMeoDapXacKeuDumXuiXepNonCommercialLocRayDoengLomDemXongSacTumNuiDocNitRemVomVua*1.000.000*100.000*d12345678d1234568d1234578d1234678d1235678d1245678d1345678d2345678u-eo-eu10,000+(((|)))d123458d123468d123568d124568d134568d234568d123478d123578d124578d134578d234578d123678d124678d134678d234678d125678d135678d145678d235678d245678d345678rad/s^2*1000*+1000+yo-yeod12348d12358d12458d13458d23458d12368d12468d13468d23468d12568d13568d14568d23568d24568d34568d12378d12478d13478d23478d12578d13578d14578d23578d24578d34578d12678d13678d14678d23678d24678d34678d15678d25678d35678d45678432000+100+ya-yoyeo-uyu-eoeu-euts'oad1238d1248d1348d2348d1258d1358d1458d2358d2458d3458d1268d1368d1468d2368d2468d3468d1568d2568d3568d4568d1278d1378d1478d2378d2478d3478d1578d2578d3578d4578d1678d2678d3678d4678d5678co-opm/s^2ya-o-eoyo-ou-aeyu-ayu-ueu-uyi-ui-yai-euk'oa''''1/10(11)(12)(13)(14)(15)(16)(17)(18)(19)(20)d128d138d148d238d248d348d158d258d358d458d168d268d368d468d568d178d278d378d478d578d678d'oat'oap'oak'yak'yik'yuk'yo+20+30+(ju)cm^2km^2mm^2cm^3km^3mm^4a.m.p.m.i'kh15ma15mbk'we22.2kh'zh'ts`sm.sn./161.52.53.54.5.5-.56.57.58.5a-ui-ai-o'aa'ee'wa`aa`ee40+60+70+80+90+.10ch.ww.```***./.a/ca/sc/oc/u1/71/90/316.17.18.19.20.(e)(f)(i)(l)(o)(q)(u)(v)(w)(x)(y)(z)[v][x]/1\/2\/3\/4\/5\/6\/7\o|od18d28d38d48d58d68d78===---10h11h12h13h14h15h16h17h18h19h20h21h22h23h24hdm2dm310dV11d12d13d14d15d16d17d19d20d21d22d23d24d25d26d27d29d30d31dyo'yu'lo'f''sh'y''@@@b'ab'ib'ub'oi'ri'zin-un-i'n`ma`my12b75bj?n756757587597607617627637647657667676838138238392390395454593964524534553843853894503863873883913793939410611151161171183973983994014032792802812828328428528628728828929029129293294295296297402982993030430530630830940405406311312407408313143153173183194114094124132132232324325416417165419420166451691701721741751771794271818218418518618718818919019192193195196414197198199202034152042052062072082092202212224225226227228229231233250251253244359421249255423259260261263425426426526642426927032633133433533633743944033833934043743634434935035135235435536036136236436536636937037137237375119120P3774421394441421441491541551591621634454462154492742754474482772738va8vb2cr5.1$$$CreativeCommonsPublicDomainAttributionmicroFarad{WaSallam}PoseidonMohammed{Alayhi}LosslessMercuryJupiterApollon(OJeon)ZhongFuRenTianG.E.O.YinYaoTaiYinCupidoKronosSyouwaShutsuMingYiJiaRen{Qala}RenRen2ndScrHi-ResPhuongChiengChuyenNguyenKhuyenTriengManatEarthHadesSTRS.[JIS]HZZZG(OHu)MeijiKoengDaYouDaChuShiKeDaGuoZzietAkbarAllahRasulTprusDHwtyHnmmtSndytCHLNNDiRenDi[Ben][San]ChuoiXuyenNguoiGiongQuanhGwaaiSiengKhuotNgheoViengKiengNhinhChoacGuongChoanKwaatKhoanThanhChinhChoaiThuocTsubiTrangPhangKhuyaShchDramU-eoLariChR.ZeusKhR.AINNAUNNINNNHZWGHZZPSZWGHPWGHXWGJuUiInc.kOhmC/kgMOhmK.K.ZaauKoekHaapKyutSungFaanCaapHaakNgokNaaiZaakZaapSaatHuouDaatLaapNgouLoekBaakZaamGaakGaapGaamZaanDaapBaatNgitJiJiNyipGgopHxitBbutHxuoDdurGguoNyopJjutJjieNZUPCuopShurHxopShatShopNBIEJongKakuSL`MAMHASpsiXnmwmAatwDAtimAxbaHinSmtdwAtspAtxAstSnwtsnTrxAwtdSrtSwtyxprSsDAwHqAtmxAtsTAwHnqtmDAtzSStHnubNqigMouaThaoChueAivaAtiuD.C.D.S.Ped.NoneFullPassOpen[An][Da][Er]-SSSXuoiTrumXienTrayPhiaMaauNhuiLinhKingFaaiThaiTachHoatRuonThiaKhamMuoiRuoiXungNhayTuouHoetPhomThauHuytThucCaauRenhToacUongZaatFaatSoekPhucGiaiKhacChiaMaaiChoiTrouChacNaapOangGianPaaiNhoiMachThinGiucThepThuaThueGiamThenToetNhapNhipSaauNguiNichKhayDyutKhaoPheuThomTheoPhacLiemKhemLanhHoaiNhepGiemNhotGenhTretVuonRanhTrauCanhKechCaaiNhatHoanNhenGwatChopRungTraiPhoiManhTuoiRokuTshZh'Kh'TtsLkhRkhDchTs`YYYBh.U-ui-UrNpTs'ECUEURHRNPtsBTCMhoTELA/SFAXIINULSOHENQEOTETXSTXACKBELDC1DLEDC2DC3DC4CANETBSUBSYNDELESCShtMR.PR.CS.ANGENGENNANNONNGGONGBXGHZGHZTSWZSWGSZZPTE10M11M12MLTDHPAkHzGHzMHzTHzMPakPaGPaCo.A/mPPMV/mNimDikBatHukHapPunMikCiuKiuHipPatGikPokZekKauDukFukLipAanCypQotGepSsiLyrMopCYTBurHmoPytZotShyVepVurYitJjyZURNiiDooDzwCchZhwTchTswShwCocHchRMTIMNSriXrdstXSnyfnDaHAmnDbaDsrmAisAHzAbyHAtSsAsDmwHmxpSzmAqAbmAwnDsnDwSAaSApAqwSmHfnmzHsAqiAmzSnSmawADnDmiaHpzDsbAwDbAxtiAtSzpwHaHaHtpHDtiAbAtfmDHdmDsiAwAsAmsHDDqmASmsbiAsSmHmtwbArtHiTimDtwAHbAsSribAwDaXkrPuaCCTCNTCPDLeeLorHerVueCC0(A)(B)(C)(D)(E)(F)(G)(H)(I)(J)(K)(L)(M)(N)(Q)(R)(S)(T)(U)(V)(W)(X)(Y)(Z)[S]PPV60PHDRSHVUHDVOD*M*BikGopTopLapZokCapRetRiuTetHweRapMotDucGayLukEotNipRinHoiVumNetXapMepBeoSucBopTucHucLayXamMapBemGweLeuCopBepZapNacRamOamRumSeuHetWetSutLemOaiNeuXaoCacReuEngAakBocMuaLumRucHumWokBetKokXayHocNutNeoEchZukGukNoiDepKhiTeoOatXaiToiViaNocVotFaiXucBau -------------------------------------------------------------------------------- /src/pointers.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kornelski/deunicode/cfb8552fbbdf6d1f3f996ee4f2e78ec5e482bcef/src/pointers.bin -------------------------------------------------------------------------------- /tests/unidecode.rs: -------------------------------------------------------------------------------- 1 | use deunicode::*; 2 | 3 | #[test] 4 | /// Tests that every character outputted by the deunicode_char() function is valid ASCII. 5 | fn test_every_char_is_ascii1() { 6 | for c in (0 ..= 0x1FFFF) 7 | .filter_map(std::char::from_u32) 8 | .filter_map(deunicode_char) { 9 | assert!(c.chars().all(|ascii_ch| { 10 | ascii_ch as u32 <= 127 11 | })); 12 | } 13 | } 14 | 15 | #[test] 16 | /// Tests that every character outputted by the deunicode_char() function is valid ASCII. 17 | fn test_every_char_is_ascii2() { 18 | for c in (0x1FFFF ..= 0x10FFFF) 19 | .filter_map(std::char::from_u32) 20 | .filter_map(deunicode_char) { 21 | assert!(c.chars().all(|ascii_ch| { 22 | ascii_ch as u32 <= 127 && ascii_ch as u8 >= b'\t' 23 | })); 24 | } 25 | } 26 | 27 | // These tests were ported directly from the original `Text::deunicode` Perl 28 | // module. 29 | #[test] 30 | #[cfg(feature = "alloc")] 31 | fn test_conversion() { 32 | assert_eq!(deunicode("✓"), "OK"); 33 | assert_eq!(deunicode("Æneid"), "AEneid"); 34 | assert_eq!(deunicode("étude"), "etude"); 35 | assert_eq!(deunicode("北亰"), "Bei Jing"); 36 | assert_eq!(deunicode("北亰city"), "Bei Jing city"); 37 | assert_eq!(deunicode("北亰 city"), "Bei Jing city"); 38 | assert_eq!(deunicode("北 亰 — city"), "Bei Jing -- city"); 39 | assert_eq!(deunicode("北亰 city "), "Bei Jing city "); 40 | assert_eq!(deunicode("ᔕᓇᓇ"), "shanana"); 41 | assert_eq!(deunicode("ᏔᎵᏆ"), "taliqua"); 42 | assert_eq!(deunicode("ܦܛܽܐܺ"), "ptu'i"); 43 | assert_eq!(deunicode("अभिजीत"), "abhijiit"); 44 | assert_eq!(deunicode("অভিজীত"), "abhijiit"); 45 | assert_eq!("അഭിജീത".ascii_chars().to_string(), "abhijiit"); 46 | assert_eq!(deunicode("മലയാലമ്"), "mlyaalm"); 47 | assert_eq!(deunicode("げんまい茶"), "genmaiCha"); 48 | assert_eq!(deunicode("🦄☣"), "unicorn biohazard"); 49 | assert_eq!(deunicode("🦄 ☣"), "unicorn biohazard"); 50 | assert_eq!("🦄 ☣".ascii_chars().to_string(), "unicorn biohazard"); 51 | assert_eq!(deunicode(" spaces "), " spaces "); 52 | assert_eq!(deunicode(" two spaces "), " two spaces "); 53 | assert_eq!(deunicode(&[std::char::from_u32(61849).unwrap()].iter().collect::()), "[?]"); 54 | assert_eq!(deunicode_with_tofu(&[std::char::from_u32(61849).unwrap()].iter().collect::(), "tofu"), "tofu"); 55 | assert_eq!(deunicode_with_tofu_cow("\u{2713} [x]", "?"), "OK [x]"); 56 | } 57 | 58 | #[test] 59 | #[cfg(feature = "alloc")] 60 | fn test_issue_7() { 61 | assert_eq!(deunicode("技术").to_lowercase(), "ji shu"); 62 | assert_eq!(deunicode("评价").to_lowercase(), "ping jia"); 63 | assert_eq!(deunicode("旅游").to_lowercase(), "lv you"); 64 | assert_eq!("旅游".ascii_chars().to_string().to_lowercase(), "lv you"); 65 | } 66 | 67 | #[test] 68 | fn test_deunicode_char() { 69 | assert_eq!(deunicode_char('Æ'), Some("AE")); 70 | assert_eq!(deunicode_char('北'), Some("Bei ")); 71 | assert_eq!(deunicode_char('亰'), Some("Jing ")); 72 | assert_eq!(deunicode_char('ᔕ'), Some("sha")); 73 | 74 | assert_eq!(deunicode_char(std::char::from_u32(0x1FFFF).unwrap()), None); 75 | assert_eq!(deunicode_char(std::char::from_u32(0x2FFFF).unwrap()), None); 76 | assert_eq!(deunicode_char(std::char::from_u32(0x3FFFF).unwrap()), None); 77 | assert_eq!(deunicode_char(std::char::from_u32(0x4FFFF).unwrap()), None); 78 | assert_eq!(deunicode_char(std::char::from_u32(0x5FFFF).unwrap()), None); 79 | assert_eq!(deunicode_char(std::char::from_u32(0x6FFFF).unwrap()), None); 80 | assert_eq!(deunicode_char(std::char::from_u32(0x7FFFF).unwrap()), None); 81 | assert_eq!(deunicode_char(std::char::from_u32(0x8FFFF).unwrap()), None); 82 | assert_eq!(deunicode_char(std::char::from_u32(0x9FFFF).unwrap()), None); 83 | assert_eq!(deunicode_char(std::char::from_u32(0x10FFFF).unwrap()), None); 84 | } 85 | --------------------------------------------------------------------------------