---
name: "detect_handledata"
section: "3"
platform: "linux"
package: "libchardet"
version: "1.0.6-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/detect_handledata"
---

# detect\_handledata(3)

Detecting character set and measuring accuracy of charset

## NAME

detect\_handledata, detect\_handledata\_r - Detecting character set and measuring accuracy of charset

## SNOPSYS

**#include \<chardet.h\>**

**short chardet\_handledata (Detect \*\* handle, const char \* inbuf, DetectObj \*\* outbuf);**

**short chardet\_handledata\_r (Detect \*\* handle, const char \* inbuf, size\_t inlen, DetectObj \*\* outbuf);**

## DESCRIPTION

Storing charset and accuracy of **inbuf to** **outbuf**

The **detect\_handledata** API is deprecated becase this api is not binary safe. Use or replace to **detect\_handledata\_r** api.

### Arguments:

- **handle**

  **Detect** handle resource that allocated by **detect\_init** api.

- **inbuf**

  input string for detecting

- **inlen**

  length of input string for detecting

- **outbuf**

  Stroing inforamtion of **inbuf.** The structure of **outbuf** is follows.

  ```
  	typedef struct DetectObject {
  		char * encoding;
  		float confidence;
  	} DetectObj;
  ```

  The **outbuf** variable is must initialized by **detect\_obj\_init** API before calling this detect api.

## RETURN VALUES

Returns following condition as case by case.

- **CHARDET\_SUCCESS**

  Detecting success

- **CHARDET\_NO\_RESULT**

  Detection failure

- **CHARDET\_NULL\_OBJECT**

  Don't initializing **outbuf** with **chardet\_obj\_init**

- **CHARDET\_OUT\_OF\_MEMORY**

  Occuring **out of memory** at internal API

## EXAMPLE

```
#include <chardet.h>
int main (void) {
	Detect    * d;
	DetectObj * obj;
	int i, arrayNum;
	char *str[] = {
		"this is ascii",
		"이건 euc-kr 입니다."
	};
	arrayNum = sizeof (str) / sizeof (str[0]);
	if ( (d = detect_init ()) == NULL ) {
		fprintf (stderr, "chardet handle initialize failed\n");
		return CHARDET_MEM_ALLOCATED_FAIL;
	}
	for ( i=0; i<arrayNum; i++ ) {
		detect_reset (&d);
		if ( (obj = detect_obj_init ()) == NULL ) {
			fprintf (stderr, "Memory Allocation failed\n");
			return CHARDET_MEM_ALLOCATED_FAIL;
		}
		//switch (detect_handledata (&d, str[i], &obj))
		switch (detect_handledata (&d, str[i], strlen(str[i]), &obj))
		{
			case CHARDET_OUT_OF_MEMORY :
				fprintf (stderr, "On handle processing, occured out of memory\n");
				detect_obj_free (&obj);
				return CHARDET_OUT_OF_MEMORY;
			case CHARDET_NULL_OBJECT :
				fprintf (stderr,
						"2st argument of chardet() is must memory allocation "
						"with detect_obj_init API\n");
				return CHARDET_NULL_OBJECT;
		}
		# check support obj->bom with CHARDET_BOM_CHECK constant
		printf ("encoding: %s, confidence: %f, exists bom: %d\n", obj->encoding, obj->confidence, obj->bom);
		detect_obj_free (&obj);
	}
	detect_destroy (&d);
    return 0;
}
```

## AUTHORS

JoungKyun.Kim \<http://oops.org\>

## BUG REPORTS

Use QnA board on https://github.com/Joungkyun/libchardet/issues

## SEE ALSO

[detect\_obj\_init(3)](/detect_obj_init/3.md), [detect\_obj\_free(3)](/detect_obj_free/3.md), [detect\_init(3)](/detect_init/3.md), [detect\_reset(3)](/detect_reset/3.md), [detect\_destroy(3)](/detect_destroy/3.md)
