Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Exception
- Source
- IntelliJ
- 설정
- oracle
- ubuntu
- Thymeleaf
- Spring Boot
- Open Source
- Tomcat
- MySQL
- Docker
- git
- Eclipse
- AJAX
- MSSQL
- error
- Core Java
- STS
- 문서
- maven
- Python
- myBatis
- 오픈소스
- SpringBoot
- JDBC
- spring
- PostgreSQL
- JavaScript
- jpa
Archives
- Today
- Total
헤르메스 LIFE
[오류] 보이지 않는 UniCode 오류 본문
728x90
다른 시스템으로 부터 이관되어 온 ( WebService 방식 이라든지.. ) 데이터에 특수문자 등이 포함되어 문제를 일으키는 문제가 발생했습니다.
일반적으로는 문제가 되지 않지만, 아마도 웹페이지에서 텍스트를 복사해서 붙여넣으면서 딸려들어온 문자들로 보여집니다. 예를 들어 줄바꿈없는 공백(non-breaking space)
유니 코드 이름 | No-Break Space |
유니 코드 번호 | U+00A0 |
HTML코드 |   |
CSS 코드 | \00A0 |
유니 코드 | |
Block | 라틴-1 보충 |
유니 코드 버전 | 1.1 (1993) |
public static void main( String[] args ) {
//String input1 = "프랑스, FR ";
String input1 = "DISC 한글";
System.out.println( "before :: |" + input1 + "|" );
String input2 = convertUnicode(input1);
System.out.println( "uni Code :: |" + input2 + "|" );
input1 = StringReplace( input1 );
System.out.println( "after :: |" + input1 + "|" );
}
// 한글유니코드(\uAC00-\uD7A3), 숫자 0~9(0-9), 영어 소문자a~z(a-z), 대문자A~Z(A-Z), 공백(\s)
public static String StringReplace( String str ) {
String match = "[^\uAC00-\uD7A3xfe0-9a-zA-Z\\s]";
str = str.replaceAll( match, "" );
return str;
}
// String에서 유니코드로 변환
public static String convertUnicode( String val ) {
// 변환할 문자를 저장할 버퍼 선언
StringBuffer sb = new StringBuffer();
// 글자를 하나하나 탐색한다.
for ( int i = 0; i < val.length(); i++ ) {
// 글자 추츨 int값으로 가져온다.
int code = val.codePointAt( i );
// 128이하면 ascii코드로 변환하지 않는다.
if ( code < 128 ) {
sb.append( String.format( "%c", code ) );
} else {
// 16진수 유니코드로 변환한다.
sb.append( String.format( "\\u%04x", code ) );
}
}
ALTER FUNCTION [dbo].[Find_Unicode]
(
@in_string nvarchar(max)
)
RETURNS @unicode_char TABLE(id INT IDENTITY(1,1), Char_ NVARCHAR(4), position BIGINT)
AS
BEGIN
DECLARE @character nvarchar(1)
DECLARE @index int
SET @index = 1
WHILE @index <= LEN(@in_string)
BEGIN
SET @character = SUBSTRING(@in_string, @index, 1)
IF((UNICODE(@character) NOT BETWEEN 32 AND 127) AND UNICODE(@character) NOT IN (10,11))
BEGIN
INSERT INTO @unicode_char(Char_, position)
VALUES(@character, @index)
END
SET @index = @index + 1
END
RETURN
END
SELECT *
FROM (
SELECT [코드]
, [한글코드명]
, (
SELECT CHAR_
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ID ) AS RN, * FROM [Find_Unicode](TB_[테이블명].[한글코드명])
) T
WHERE RN = 1
) TARGET1
FROM TB_[테이블명]
) A
WHERE A.TARGET1 NOT LIKE '%[가-힣]%'
AND A.TARGET1 IS NOT NULL
참조
https://avada.tistory.com/2160
https://unicode-table.com/kr/00A0/
728x90