Sponsored Content
Top Forums Shell Programming and Scripting Perl script backspace not working for Unicode characters Post 302500484 by tdw on Monday 28th of February 2011 07:21:02 PM
Old 02-28-2011
Perl script backspace not working for Unicode characters

Hello,

My Perl script reads input from stdin and prints it out to stdout. After I read input I use BACKSPACE to erase characters. However BACKSPACE does not work with Unicode characters that are multi-bytes. On screen the character is erased but underneath only one byte is deleted instead of all bytes of the character, which makes remaining bytes incomplete UTF-8 characters. Here's my script:

Code:
#!/usr/bin/perl
binmode STDIN, ":encoding(utf8)";
binmode STDOUT, ":encoding(utf8)";
my $str;
while(1) {
  printf("please enter text > ");
  chomp($str = <STDIN>);
  printf("You entered: %s\n", $str);
}

I am using bash in a Putty terminal with UTF-8 encoding. Everything on Unicode works fine in shell including BACKSPACE. It is only a problem in my Perl script. Can anyone help? Thanks.

-Tom
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Backspace Not Working in Script

Hello, I've written a Perl script that prompts for asnwers to questons. At those prompts, the backspace key shows up as ^H^H. I would like the users to have the ablility to use the backspace key. I'm running bash shell and don't otherwise have this problem. Any help would be greatly... (4 Replies)
Discussion started by: Atama
4 Replies

2. Programming

How to display unicode characters / unicode string

I have a stream of characters like "\u8BBE\u5907\u7BA1" and i want to display it. I tried following things already without any luck. 1) printf("%s",L("\u8BBE\u5907\u7BA1")); 2) printf("%lc",0x8BBE); 3) setlocale followed by fwide followed by wprintf 4) also changed the local manually... (3 Replies)
Discussion started by: jackdorso
3 Replies

3. AIX

problem with Unicode characters insertion

hi, I have a problem with unicode chars ( chinese, japanese etc ) insertion using sqlplus prompt. When i wrote a proc program for it i am able to create records. But when i fore the same query on sql prompt it stores reverse ????? ..some junk. widechar columns are mapped with NVARCHAR datatype.... (0 Replies)
Discussion started by: suman_jakkula
0 Replies

4. Shell Programming and Scripting

Help replacing or scrubbing unicode characters

I have a csv (tab delimited) file that is created by an application (that I didn't write). Every so often it throw out a <U+FEFF> (Zero Width no break space) character at the begining of a tabbed field. The charcater is invisible to some editors, but it shows up bolded in less. The issue is... (3 Replies)
Discussion started by: roninuta
3 Replies

5. UNIX for Dummies Questions & Answers

remove special and unicode characters

Hi, How do I remove the lines where special characters or Unicode characters appear? The following query does work but I wonder if there is a better way. cat test.txt | egrep -v '\)|#|,|&|-|\(|\\|\/|\.' The following lines show that my query is incomplete. Warning: The word "*Khan" is... (1 Reply)
Discussion started by: shantanuo
1 Replies

6. Programming

How to make gl_get_line read unicode characters

Hi, My program uses gl_get_line from libtecla to get user input from terminal. It works fine as long as I enter English at the terminal prompt. However, if I enter other languages, such as Chinese characters, either by typing in or cut-and-paste, the input characters get cleared from terminal... (5 Replies)
Discussion started by: tdw
5 Replies

7. Shell Programming and Scripting

stty erase ^h not working for backspace

Hi , I have to press shift + Backspace to do backspace on my unix termminal everytime. How can i configure it to a normal backspace only. Please help me here. PFB the contents of the stty -a : dbtgr@hpxi017:/pocuser/C5/aimsys/dbtgr> stty -a speed 38400 baud; line = 0; rows = 35; columns =... (4 Replies)
Discussion started by: kunwar
4 Replies

8. Solaris

[SOLVED] Backspace not working!!!!!

Hi friends, Hope u r doing well. It is a very strange problem that I've never faced when I used linux or freebsd. When a type a command in Solaris 10, and if I make a mistake, the backspace doesn't work, when I press the backspace key three times forexample, this is what I get, ^H ^H ^H. The same... (2 Replies)
Discussion started by: gabam
2 Replies

9. Shell Programming and Scripting

Remove ^? characters in shell variables on using backspace

Friends, I observed a peculiar problem in shell. if I set a variable using standard input and backspace was used by the user, then the variable get ^? characters embedded in the variable. ### echo "Enter value for X=" read X echo $X expr $X + 1 ### If the variable is echoed, then there... (3 Replies)
Discussion started by: sachinverma
3 Replies

10. Shell Programming and Scripting

Display unicode characters in zos shell

Hi all, I have a shell script that has several strings with \uxxxx characters distributed within. I would like to display these characters when I execute the script and echo the strings. I am running on zos in an sh environment. Some strings look like this: "Chcete-li pou\u017e\u00edt" <---... (1 Reply)
Discussion started by: adam.wis
1 Replies
utf8(3pm)						 Perl Programmers Reference Guide						 utf8(3pm)

NAME
utf8 - Perl pragma to enable/disable UTF-8 (or UTF-EBCDIC) in source code SYNOPSIS
use utf8; no utf8; DESCRIPTION
The "use utf8" pragma tells the Perl parser to allow UTF-8 in the program text in the current lexical scope (allow UTF-EBCDIC on EBCDIC based platforms). The "no utf8" pragma tells Perl to switch back to treating the source text as literal bytes in the current lexical scope. This pragma is primarily a compatibility device. Perl versions earlier than 5.6 allowed arbitrary bytes in source code, whereas in future we would like to standardize on the UTF-8 encoding for source text. Until UTF-8 becomes the default format for source text, this pragma should be used to recognize UTF-8 in the source. When UTF-8 becomes the standard source format, this pragma will effectively become a no-op. For convenience in what follows the term UTF-X is used to refer to UTF-8 on ASCII and ISO Latin based platforms and UTF-EBCDIC on EBCDIC based platforms. Enabling the "utf8" pragma has the following effect: o Bytes in the source text that have their high-bit set will be treated as being part of a literal UTF-8 character. This includes most literals such as identifier names, string constants, and constant regular expression patterns. On EBCDIC platforms characters in the Latin 1 character set are treated as being part of a literal UTF-EBCDIC character. Note that if you have bytes with the eighth bit on in your script (for example embedded Latin-1 in your string literals), "use utf8" will be unhappy since the bytes are most probably not well-formed UTF-8. If you want to have such bytes and use utf8, you can disable utf8 until the end the block (or file, if at top level) by "no utf8;". Utility functions The following functions are defined in the "utf8::" package by the perl core. o $num_octets = utf8::upgrade($string); Converts (in-place) internal representation of string to Perl's internal UTF-X form. Returns the number of octets necessary to repre- sent the string as UTF-X. Can be used to make sure that the UTF-8 flag is on, so that "w" or "lc()" work as expected on strings con- taining characters in the range 0x80-0xFF. Note that this should not be used to convert a legacy byte encoding to Unicode: use Encode for that. Affected by the encoding pragma. o utf8::downgrade($string[, FAIL_OK]) Converts (in-place) internal representation of string to be un-encoded bytes. Returns true on success. On failure dies or, if the value of FAIL_OK is true, returns false. Can be used to make sure that the UTF-8 flag is off, e.g. when you want to make sure that the substr() or length() function works with the usually faster byte algorithm. Note that this should not be used to convert Unicode back to a legacy byte encoding: use Encode for that. Not affected by the encoding pragma. o utf8::encode($string) Converts (in-place) $string from logical characters to octet sequence representing it in Perl's UTF-X encoding. Same as Encode::encode_utf8(). Note that this should not be used to convert a legacy byte encoding to Unicode: use Encode for that. o $flag = utf8::decode($string) Attempts to convert $string in-place from Perl's UTF-X encoding into logical characters. Same as Encode::decode_utf8(). Note that this should not be used to convert Unicode back to a legacy byte encoding: use Encode for that. o $flag = utf8::valid(STRING) [INTERNAL] Test whether STRING is in a consistent state. Will return true if string is held as bytes, or is well-formed UTF-8 and has the UTF-8 flag on. Main reason for this routine is to allow Perl's testsuite to check that operations have left strings in a consis- tent state. "utf8::encode" is like "utf8::upgrade", but the UTF8 flag is cleared. See perlunicode for more on the UTF8 flag and the C API functions "sv_utf8_upgrade", "sv_utf8_downgrade", "sv_utf8_encode", and "sv_utf8_decode", which are wrapped by the Perl functions "utf8::upgrade", "utf8::downgrade", "utf8::encode" and "utf8::decode". Note that in the Perl 5.8.0 implementation the functions utf8::valid, utf8::encode, utf8::decode, utf8::upgrade, and utf8::downgrade are always available, without a "require utf8" statement-- this may change in future releases. BUGS
One can have Unicode in identifier names, but not in package/class or subroutine names. While some limited functionality towards this does exist as of Perl 5.8.0, that is more accidental than designed; use of Unicode for the said purposes is unsupported. One reason of this unfinishedness is its (currently) inherent unportability: since both package names and subroutine names may need to be mapped to file and directory names, the Unicode capability of the filesystem becomes important-- and there unfortunately aren't portable answers. SEE ALSO
perlunicode, bytes perl v5.8.0 2002-06-01 utf8(3pm)
All times are GMT -4. The time now is 07:18 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy