diff --git a/source/cl-unicode/api.lisp b/source/cl-unicode/api.lisp
index f9c4d52..5c96181 100644
--- a/source/cl-unicode/api.lisp
+++ b/source/cl-unicode/api.lisp
@@ -149,6 +149,18 @@ See also CODE-BLOCKS.")
   (:method ((char character))
    (code-block (char-code char))))
 
+(defgeneric east-asian-width (c)
+  (:documentation "Returns East_Asian_Width of a character as a string
+or NIL if there is no value for that particular character. C can be
+the character's code point \(a positive integer) or a \(Lisp)
+character assuming its character code is also its Unicode code point.
+The second return value \(if there is one) is the property symbol of
+the value.
+
+See also EAST-ASIAN-WIDTHS.")
+  (:method ((char character))
+   (east-asian-width (char-code char))))
+
 (defgeneric age (c)
   (:documentation "Returns the \"age\" of a character or NIL if there
 is no age entry for that particular character.  The age of a character
@@ -301,6 +313,11 @@ are the possible return values of SCRIPT."
 the possible return values of CODE-BLOCK."
   (sort (mapcar 'property-name *code-blocks*) 'string-lessp))
 
+(defun east-asian-widths ()
+  "Returns a sorted list of all East_Asian_Widths known to CL-UNICODE.
+These are the possible return values of EAST-ASIAN-WIDTH."
+  (sort (mapcar 'property-name *east-asian-widths*) 'string-lessp))
+
 (defun binary-properties ()
   "Returns a sorted list of all binary properties known to CL-UNICODE.
 These are the allowed second arguments \(modulo canonicalization) to
diff --git a/source/cl-unicode/build/char-info.lisp b/source/cl-unicode/build/char-info.lisp
index 30cd35b..1732976 100644
--- a/source/cl-unicode/build/char-info.lisp
+++ b/source/cl-unicode/build/char-info.lisp
@@ -50,6 +50,11 @@ property symbol.")
                :type (or symbol null)
                :documentation "The block the character belongs to - a
 property symbol.")
+   (east-asian-width :initform nil
+                     :accessor east-asian-width*
+                     :type (or symbol null)
+                     :documentation "East_Asian_Width the character
+belongs to - a property symbol.")
    (unicode1-name :initarg :unicode1-name
                   :initform nil
                   :reader unicode1-name
diff --git a/source/cl-unicode/build/dump.lisp b/source/cl-unicode/build/dump.lisp
index c720068..76fb54c 100644
--- a/source/cl-unicode/build/dump.lisp
+++ b/source/cl-unicode/build/dump.lisp
@@ -126,6 +126,7 @@ using DUMP-METHOD."
   (with-output-to-source-file (out "../methods.lisp")
     (dump-method 'script 'script* out)
     (dump-method 'code-block 'code-block* out)
+    (dump-method 'east-asian-width 'east-asian-width* out)
     (dump-method 'age 'age* out #'equal)
     (dump-method 'general-category 'general-category* out)
     (dump-method 'bidi-class 'bidi-class* out)
@@ -178,6 +179,7 @@ DUMP-LIST."
     (dump-list '*general-categories* out)
     (dump-list '*scripts* out)
     (dump-list '*code-blocks* out)
+    (dump-list '*east-asian-widths* out)
     (dump-list '*binary-properties* out)
     (dump-list '*bidi-classes* out)))
 
diff --git a/source/cl-unicode/build/read.lisp b/source/cl-unicode/build/read.lisp
index a9151e1..52fd6fb 100644
--- a/source/cl-unicode/build/read.lisp
+++ b/source/cl-unicode/build/read.lisp
@@ -143,6 +143,16 @@ code block to the corresponding entries in *CHAR-DATABASE*."
         (when char-info
           (setf (code-block* char-info) code-block))))))
 
+(defun read-east-asian-widths ()
+  "Parses the file \"EastAsianWidth.txt\" and adds the information about
+East_Asian_Width to the corresponding entries in *CHAR-DATABASE*."
+  (with-unicode-file ((code-point-range (east-asian-width symbol)) "EastAsianWidth.txt")
+    (pushnew east-asian-width *east-asian-widths* :test #'eq)
+    (with-code-point-range (code-point code-point-range)
+      (let* ((char-info (aref *char-database* code-point)))
+        (when char-info
+          (setf (east-asian-width* char-info) east-asian-width))))))
+
 (defun read-binary-properties ()
   "Parses the file \"PropList.txt\" and adds information about binary
 properties to the corresponding entries in *CHAR-DATABASE*."
@@ -226,12 +236,14 @@ source code files for CL-UNICODE."
         *general-categories* nil
         *scripts* nil
         *code-blocks* nil
+        *east-asian-widths* nil
         *binary-properties* nil
         *bidi-classes* nil)
   (initialize-property-symbols)
   (read-character-data)
   (read-scripts)
   (read-code-blocks)
+  (read-east-asian-widths)
   (read-binary-properties)
   (read-derived-age)
   (read-mirroring-glyphs)
diff --git a/source/cl-unicode/packages.lisp b/source/cl-unicode/packages.lisp
index 7948bdf..af49d75 100644
--- a/source/cl-unicode/packages.lisp
+++ b/source/cl-unicode/packages.lisp
@@ -51,6 +51,8 @@
            :code-blocks
            :combining-class
            :disable-alternative-character-syntax
+           :east-asian-width
+           :east-asian-widths
            :enable-alternative-character-syntax
            :general-categories
            :general-category
diff --git a/source/cl-unicode/specials.lisp b/source/cl-unicode/specials.lisp
index c27e11a..edd4263 100644
--- a/source/cl-unicode/specials.lisp
+++ b/source/cl-unicode/specials.lisp
@@ -66,6 +66,9 @@ corresponding character \(unless all of them are NIL).")
 (defvar *code-blocks* nil
   "A list of all property symbols which denote blocks.")
 
+(defvar *east-asian-widths* nil
+  "A list of all property symbols which denote East_Asian_Widths.")
+
 (defvar *binary-properties* nil
   "A list of all property symbols which denote binary properties.")
 
diff --git a/source/cl-unicode/test/simple b/source/cl-unicode/test/simple
index c203e47..8527c2a 100644
--- a/source/cl-unicode/test/simple
+++ b/source/cl-unicode/test/simple
@@ -440,3 +440,12 @@
 (= #x5d0 (char-code #\HebrewLetterAlef))
 (= #x5d0 (char-code #\Hebrew:Alef))
 (= #x5d0 (char-code #\Alef))
+
+;; East_Asian_Width
+(string= "Na" (east-asian-width (character-named "LATIN CAPITAL LETTER A" :want-code-point-p t)))
+(string= "F" (east-asian-width (character-named "FULLWIDTH LATIN CAPITAL LETTER A" :want-code-point-p t)))
+(string= "H" (east-asian-width (character-named "HALFWIDTH KATAKANA LETTER KA" :want-code-point-p t)))
+(string= "W" (east-asian-width (character-named "KATAKANA LETTER KA" :want-code-point-p t)))
+(string= "W" (east-asian-width (character-named "CJK UNIFIED IDEOGRAPH-56FD" :want-code-point-p t)))
+(string= "A" (east-asian-width (character-named "LATIN SMALL LETTER U WITH CARON" :want-code-point-p t)))
+(string= "N" (east-asian-width (character-named "LATIN CAPITAL LETTER U WITH CARON" :want-code-point-p t)))
