PRB: Negative Integers Do Not Work as Unicode HTML Entity References

Article translations Article translations
Article ID: 272138 - View products that this article applies to.
This article was previously published under Q272138
This article has been archived. It is offered "as is" and will no longer be updated.
Expand all | Collapse all

On This Page

Symptoms

Some functions, such as the Microsoft Visual Basic (VB) and Visual Basic Script (VBScript) AscW function, may return a negative number when you ask for the Unicode value of a non-Latin character (such as Chinese Hanzi, Japanese Kanji or Korean Hangul). When you use this negative number as an HTML entity reference (&#nnnn, where nnnn is either a hexadecimal or decimal Unicode number), you see the entity reference as literal text, instead of the corresponding non-Latin character.

Cause

Unicode numbers occupy a 16-bit positive range from 0 to 65535 (0xFFFF), and cannot be negative.

Resolution

When AscW returns a negative number, it returns the twos complement form of that number. To convert the twos complement notation into normal binary notation, add 0xFFF to the return result. For an example, see the "More Information" section.

More information

Steps to Reproduce Behavior

  1. Save the following HTML code to a file named TestAscW.htm:
    <HTML>
    
    <HEAD>
    <TITLE>PRB: Negative Integers Do Not Work as Unicode HTML Entity  References</TITLE>
    </HEAD>
    
    <SCRIPT language="VBScript">
    
    // The character used below is the Japanese character "go" (8A9E in 
    //Unicode).
    
    sub load()
    	div1.innerHTML = "Actual character is &#35486; & AscW output is &#" & AscW(ChrW(35486))
    end sub
    
    </SCRIPT>
    
    <BODY language="VBScript" onload="load()">
    
    <DIV id="div1">
    
    </DIV>
    
    </BODY>
    
    </HTML>
    					
  2. Open this file in Internet Explorer. The second character reference is displayed as raw text, and not as the Japanese character "go."
To work around this problem, change the script block to the following:
function DecodeAscW(sOutput) 
	sAscVal = AscW(sOutput) 
	If sAscVal < 0 Then 	
		sAscVal = 65536 + sAscVal 
	End If
	DecodeAscW = sAscVal
end function

sub load()
	div1.innerHTML = "Actual character is &#35486; AscW output is &#" &  DecodeAscW(ChrW(35486))
end sub
				

References

For more information about developing Web-based solutions for Microsoft Internet Explorer, visit the following Microsoft Web sites:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Properties

Article ID: 272138 - Last Review: October 26, 2013 - Revision: 4.0
Applies to
  • Microsoft Internet Explorer 4.01 Service Pack 1
Keywords: 
kbnosurvey kbarchive kbdhtml kbintl kbintldev kbprb kbunicode KB272138

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com