letter be is inserted into numbers as digit group separator

A

aa

when I ourput data from Access, numbers bigger than 999 are shown with
letter "B" inserted into the 4th position left to the coma. (in my w2k
regional settings I have the decimal dot separator set to "." and digit
group separater set to nothing. In Access the number are shown with "." as
decimal separator, but for some reason ASP used "," instead)
Say, 3000,00 is shown as 3B 000,00
Why and how do I sort this out?
 
D

Douglas J. Steele

Likely the server on which ASP is running has different Regional Settings
than the computer where Access is running.

Try explicitly formatting the numbers.
 
B

Baz

What do you mean by "output data from Access"? How are you outputting it,
and what software are you using to view the output data?
 
A

aa

ASP
The query is stored in MDB file and when open in Access all the numbers look
OK
View in IE6
But why "B"? What is "B"?
 
B

Baz

I think you are more likely to get an answer from the ASP people than the
Access people.
 
A

aa

applying ASP function FormatNumber() with digit groups separation disabled
sorted the problem out.
But I still curious where that "B" came from
 
A

Anthony Jones

aa said:
applying ASP function FormatNumber() with digit groups separation disabled
sorted the problem out.
But I still curious where that "B" came from

We are going to need to see some code if we have any chance helping you.
 
A

aa

You think it has to do with the ASP code?
It pretty standard and does not seem to use anything which can relevant to
the problem, but might have to do with some settings on the computer, for it
works OK on my XP-Home notebook, and the problems happen on w2k Pro SP4.
Anyway, the code creates a recordset object and then goes through it
building rows for an HTML table like this:

================================
set objRS=objCom.Execute
dim html_string, c
do while not objRS.eof
c= objRS(2)
html_string=html_string&"<tr><td>" & c & "</td></tr>"
objRS.movenext
loop
Response.write html_string
================================

This gets letter "B" inserted
If I change
c= objRS(2)
to
c= FormatNumber(objRS(2),2,,,0)
then it is OK
 
M

Mike Brind

aa said:
You think it has to do with the ASP code?
It pretty standard and does not seem to use anything which can relevant to
the problem, but might have to do with some settings on the computer, for
it
works OK on my XP-Home notebook, and the problems happen on w2k Pro SP4.
Anyway, the code creates a recordset object and then goes through it
building rows for an HTML table like this:

================================
set objRS=objCom.Execute
dim html_string, c
do while not objRS.eof
c= objRS(2)
html_string=html_string&"<tr><td>" & c & "</td></tr>"
objRS.movenext
loop
Response.write html_string
================================

This gets letter "B" inserted
If I change
c= objRS(2)
to
c= FormatNumber(objRS(2),2,,,0)
then it is OK
 
B

Baz

I don't think it's anything to do with the code, I think there's some kind
of number display format setting somewhere, but I don't know enough about
ASP to know what.

The fact that using the Format function "corrects" it proves that what you
are getting from the recordset is a number. Numbers don't contain "B"
characters (at least, decimal ones don't!), hence what you have is a display
problem, not a problem with the data.
 
A

aa

Numbers do not contain, say, spacers either, yet spacers might be incertad
as digit group separator
In my case it looks like "B" is inserted as such a separator. Or the System
is incerting something else but encoding presents it as B
 
B

Baz

Numbers do NOT contain spaces or group separators, such things are a
function of display formatting, they are NOT part of numeric data. The
FormatNumber function operates on numbers, any input value which contained a
"B" would be a string, not a number, and would result in a type mismatch
error. Hence, the "B" is not in the data, it is being added by some display
formatting.
 
A

Anthony Jones

aa said:
You think it has to do with the ASP code?
It pretty standard and does not seem to use anything which can relevant to
the problem, but might have to do with some settings on the computer, for it
works OK on my XP-Home notebook, and the problems happen on w2k Pro SP4.
Anyway, the code creates a recordset object and then goes through it
building rows for an HTML table like this:

================================
set objRS=objCom.Execute
dim html_string, c
do while not objRS.eof
c= objRS(2)
html_string=html_string&"<tr><td>" & c & "</td></tr>"
objRS.movenext
loop
Response.write html_string
================================

This gets letter "B" inserted
If I change
c= objRS(2)
to
c= FormatNumber(objRS(2),2,,,0)
then it is OK

This is simply a case of messed up regional settings. Instead of having a .
or a , for the thousands separator the (or actually a) regional setting for
it has B as the thousands seperator.

First check that this isn't the case in the control panel -> regional
settings -> numbers tab. However this isn't the only place that IIS may get
regional settings in fact it's unlikely. Regional settings are per user and
are stored in the user profile.

Typically the user accessing a web site does not have a profile on the
server (unless they've logged on interactively). Most often the user is the
anonymous user anyway.

In this case ASP get it's regional settings from the .DEFAULT user profile.
Hence you should use RegEdit and open the key:-

HKEY_USERS\.DEFAULT\Control Panel\International

In there is a value sThousand value. It seems likely to me that currently
this contains a B.

Things are made worse by the fact that ASP caches the regional settings and
will use them for the life time of the process. Hence even if other
requests may run under user accounts of user that do have a profile with
different regional settings these settings will be ignored.

Therefore you may find that .DEFAULT is ok but another user profile is wrong
and it's this profile that just happens to be the first used.

Anthony.
 
A

aa

Thanks, Anthony,

1. My control panel settings I addressed in my originmal message - there is
nothing criminal in them as you can see
2. HKEY_USERS\.DEFAULT\Control Panel\International
I do not know which parameter there is responsible in this case, but by the
name, there is one which might be relevant: sGrouping which is set to 3;0
Is this the one?
Regarding other profiles - this is my personal computer and nobody was
setting profiles in here. Neither did I for I even do not know how to do
this.
However, apart from DEFAULT there are two other entries under HKEY_USERS,
named S-1-5-21-1960408961-1417001333-725345543-500 and
S-1-5-21-1960408961-1417001333-725345543-500_Classes
They both have sGrouping set to 3;0

What is the verdict?
 
A

Anthony Jones

aa said:
Thanks, Anthony,

1. My control panel settings I addressed in my originmal message - there is
nothing criminal in them as you can see
2. HKEY_USERS\.DEFAULT\Control Panel\International
I do not know which parameter there is responsible in this case, but by the
name, there is one which might be relevant: sGrouping which is set to 3;0
Is this the one?
Regarding other profiles - this is my personal computer and nobody was
setting profiles in here. Neither did I for I even do not know how to do
this.
However, apart from DEFAULT there are two other entries under HKEY_USERS,
named S-1-5-21-1960408961-1417001333-725345543-500 and
S-1-5-21-1960408961-1417001333-725345543-500_Classes
They both have sGrouping set to 3;0

What is the verdict?

That's fine. What setting do you have for sThousand?
 
A

aa

below is a very interesting comment I received from Mihai Nita in NG dealing
with
i18:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This has little to do with number format.

Russian uses non breaking space (U+00A0) as thousand separator (an I guess
you are on Russian system because of the 866). This is the result of number
formatting, and it is correct.

Non-breaking space as UTF-8 is 'C2 A0' (bytes), which, when interpreted
as 1252, gives cyrillic capital letter Ve (U+0412) (which looks like an
uppercase B), followed by non-breakig space.

So you are seeing a UTF-8 page as 1251.
To confirm this is the case, force the browser to UTF-8:
Firefox: View -> Character Encoding -> Unicode (UTF-8)
IE6: View -> Encoding -> Unicode (UTF-8)

Is the result looks ok, try adding the proper meta tag in the head section
of
your HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 
A

aa

I have nothing for sThousand - just a blank space.
As you can see from my previous post, the problem was in wrong encodinmg of
my HTML page.
But they bit of the Registry you refered me to is interesting. Where can I
read about meanings of all the parameters there?
 
A

Anthony Jones

aa said:
I have nothing for sThousand - just a blank space.
As you can see from my previous post, the problem was in wrong encodinmg of
my HTML page.

I don't think that is true. I see nothing wrong with either examples of
your code.
But they bit of the Registry you refered me to is interesting. Where can I
read about meanings of all the parameters there?

sThousand simply specifies the character to use to separate groups of
thousands in formatting number. I'm not sure what would happen in nothing
is specified. These values are manipulated by the control panel regional
settings.

Try editing that registry value and placing a , or . in that value.

Also worth a look is this KB:-

http://support.microsoft.com/kb/306044
 
A

Anthony Jones

aa said:
below is a very interesting comment I received from Mihai Nita in NG dealing
with
i18:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This has little to do with number format.

Russian uses non breaking space (U+00A0) as thousand separator (an I guess
you are on Russian system because of the 866). This is the result of number
formatting, and it is correct.

Ah I see that's why your sThousand setting appears blank.
Non-breaking space as UTF-8 is 'C2 A0' (bytes), which, when interpreted
as 1252, gives cyrillic capital letter Ve (U+0412) (which looks like an
uppercase B), followed by non-breakig space.

So you are seeing a UTF-8 page as 1251.
To confirm this is the case, force the browser to UTF-8:
Firefox: View -> Character Encoding -> Unicode (UTF-8)
IE6: View -> Encoding -> Unicode (UTF-8)

Is the result looks ok, try adding the proper meta tag in the head section
of
your HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

In ASP I prefer Response.CharSet = "UTF-8"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top