닷넷 코어 시스템.Text.Json 이스케이프 해제 유니코드 문자열
사용.JsonSerializer.Serialize(obj)이스케이프된 문자열이 생성됩니다만, 이스케이프되지 않은 버전을 원합니다.예를 들어 다음과 같습니다.
using System;
using System.Text.Json;
public class Program
{
public static void Main()
{
var a = new A{Name = "你好"};
var s = JsonSerializer.Serialize(a);
Console.WriteLine(s);
}
}
class A {
public string Name {get; set;}
}
끈을 만들어 내다{"Name":"\u4F60\u597D"}하지만 나는 원한다{"Name":"你好"}
https://dotnetfiddle.net/w73vnO에서 코드 스니펫을 만들었습니다.
제발 도와주세요.
이러한 문자열을 인코딩하지 않도록 JsonSerializer 옵션을 설정해야 합니다.
JsonSerializerOptions jso = new JsonSerializerOptions();
jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
그 후, 이 옵션을 전달하면,Serialize방법.
var s = JsonSerializer.Serialize(a, jso);
풀코드:
JsonSerializerOptions jso = new JsonSerializerOptions();
jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
var a = new A { Name = "你好" };
var s = JsonSerializer.Serialize(a, jso);
Console.WriteLine(s);
결과:
콘솔에서 결과를 인쇄해야 할 경우 추가 언어를 설치해야 할 수 있습니다.여기를 참조해 주세요.
의 이스케이프 동작을 변경하려면JsonSerializer당신은 커스텀을 통과시킬 수 있다JavascriptEncoder에게JsonSerializer을 설정함으로써Encoder의 부동산JsonSerializerOptions.
디폴트 동작은 보안과JsonSerializer깊이 있는 방어를 위해 과도하게 노력했습니다.
특정 비라틴 언어의 특정 영숫자 문자를 이스케이프하는 것만을 원하는 경우 대신 다음 문자를 생성할 것을 권장합니다.JavascriptEncoder사용방법Create공장 출하 방법UnsafeRelaxedJsonEscaping인코더
JsonSerializerOptions options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs)
};
var a = new A { Name = "你好" };
var s = JsonSerializer.Serialize(a, options);
Console.WriteLine(s);
이렇게 하면 특정 세이프가드가 유지됩니다.예를 들어 HTML에 민감한 문자는 계속 이스케이프됩니다.
사용하실 수 없습니다. System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping경솔하게 빠져나갈 수 있기 때문에(그래서 이름에 '경솔'이 들어가 있습니다).작성하는 JSON이 디스크상의 UTF-8 부호화 파일에 기입되어 있는 경우, 또는 Web 요구의 일부가 명시적으로 문자 집합을 utf-8로 설정하고 있는 경우(또한 HTML 컴포넌트에 현재와 같이 내장되어 있지 않은 경우도 있습니다).
API 문서의 비고 섹션을 참조하십시오.https://learn.microsoft.com/en-us/dotnet/api/system.text.encodings.web.javascriptencoder.unsaferelaxedjsonescaping?view=netcore-3.0#remarks
또한 다음 항목을 지정하는 것도 고려할 수 있습니다.UnicodeRanges.All모든 언어를 사용할 수 없습니다.이 경우에도 보안 취약성의 영향을 받기 쉬운 특정 ASCII 문자는 제외됩니다.
JsonSerializerOptions options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
};
자세한 내용과 코드 샘플에 대해서는, https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?view=netcore-3.0#customize-character-encoding 를 참조해 주세요.
용도:
JsonSerializerOptions options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
};
다음과 같습니다.System.Text.RegularExpressions.Regex.Unescape(string)Unicode 문자를 이스케이프 해제합니다.https://learn.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.unescape
원래 질문에서 예제를 업데이트하는 중:
using System;
using System.Text.Json;
public class Program
{
public static void Main()
{
var a = new A{Name = "你好"};
var s = JsonSerializer.Serialize(a);
var unescaped = System.Text.RegularExpressions.Regex.Unescape(s);
Console.WriteLine(s);
Console.WriteLine(unescaped);
}
}
class A {
public string Name {get; set;}
}
출력:
{"Name":"\u4F60\u597D"}
{"Name":"你好"}
언급URL : https://stackoverflow.com/questions/58003293/dotnet-core-system-text-json-unescape-unicode-string
'source' 카테고리의 다른 글
| WordPress 플러그인 업데이트를 비활성화하려면 어떻게 해야 합니까? (0) | 2023.03.18 |
|---|---|
| JSX 요소를 어레이에 연결하려면 어떻게 해야 합니까? (0) | 2023.03.18 |
| 스프링 부트 2.0.0M1 NoSch Method Error: org.springframework.boot.builder.Spring Application Builder. (0) | 2023.03.18 |
| Angular 구성요소의 "개인" 및 "공개" (0) | 2023.03.18 |
| 웹 팩, ES6, React를 사용하여 JavaScript 파일 및 호출 함수 ImportJS (0) | 2023.03.18 |
