Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Render unicode characters in react native using variable

I'm trying to render some Arabic text which is in the form of Unicode.

I have already tried to render this using Text component like

const arabic  = "سُبْحَانَ اللهِ وَبِحَمْدِهِ"


render(){
 return(
  <Text>
   {arabic}
  </Text>
 )
}

it renders the Unicode as it is, but writing it this way

render(){
 return(
  <Text>

   &#1587;&#1615;&#1576;&#1618;&#1581;&#1614;&#1575;&#1606;&#1614;  
   #1575;&#1604;&#1604;&#1607;&#1616; 
 &#1608;&#1614;&#1576;&#1616;&#1581;&#1614;&#1605;&#1618;&#1583;&#1616; 
 &#1607;&#1616;

  </Text>
 )
}

renders the correct output

like image 454
Hassan Raza Avatar asked Jun 12 '19 09:06

Hassan Raza


1 Answers

If you want to store unicode characters / html entities in a variable, you need to replace the html entity with the unicode number.

For example:

const arabic = "&#1587;"; 

needs to be replaced with:

const arabic  = "\u0633";

The are several unicode tables online where you can translate your html entity to the raw unicode number.

Working example:

https://snack.expo.io/BJp-jL004

UPDATE with second approach:

Instead of a manual translation of the html entities to unicode numbers, you can use the npm module html-entities. Here the biggest advantage is, that you can use the regular <Text> Component to render your characters.

Here is an example:

import { Html5Entities } from 'html-entities'; 
const arabic  = "&#1587;&#1615;&#1576;&#1618;&#1581;&#1614;&#1575;&#1606;&#1614; &#1575;&#1604;&#1604;&#1607;&#1616; &#1608;&#1614;&#1576;&#1616;&#1581;&#1614;&#1605;&#1618;&#1583;&#1616;&#1607;&#1616;"

render() {
    const entities = new Html5Entities();
    return (
      <SafeAreaView style={styles.container}>
        <View>
        <Text> {entities.decode(arabic)} </Text>
        </View>
      </SafeAreaView>
    );
  }

Output:

demo

Working example:

https://snack.expo.io/Hk5b3IykS

like image 98
Tim Avatar answered Sep 25 '22 11:09

Tim